REST Security với JWT có lẽ đây là phương pháp tốt nhất AccessToken hết hạn hiện nay | JWT Secure

แชร์
ฝัง
  • เผยแพร่เมื่อ 2 ธ.ค. 2024

ความคิดเห็น • 70

  • @thanhnguyenba4221
    @thanhnguyenba4221 3 ปีที่แล้ว +1

    Mong đợi video tiếp theo của anh. Rất bổ ích ạ

  • @lewis.chien_
    @lewis.chien_ 3 ปีที่แล้ว +1

    tuyệt vời, âm thanh cực tốt, mong anh có thời gian ra thêm video ạ

  • @minhhieple6483
    @minhhieple6483 3 ปีที่แล้ว +4

    35:05 anh nói "chúng ta lưu accessToken ở server" em chưa hiểu, nếu lưu trên server là lưu trên RAM chẳng phải nếu mỗi lần deploy thì data sẽ bị mất hay sao ? đoạn này em chưa hiểu
    - Mong anh là một video nữa về cách lưu trữ accessToken + refreshToken như thế nào cho phù hợp.

    • @duyo9876
      @duyo9876 2 ปีที่แล้ว

      giải đáp: nói "chúng ta lưu accessToken ở server" ? -> lưu trong database, trong bảng user.

  • @haivu-fy2vu
    @haivu-fy2vu 10 หลายเดือนก่อน

    tuyệt vời

  • @nhusonofficial
    @nhusonofficial 3 ปีที่แล้ว +2

    Nay âm thanh và nội dung tốt quá chú ơi

  • @viktorphan1000
    @viktorphan1000 7 หลายเดือนก่อน +1

    cho em hỏi là tại sao thường thấy anh check if là (msg && msg === 'jwt expired') mình không phải chỉ cần check trường hợp msg === 'jwt expired' là ok rồi sao anh

  • @thiinh9289
    @thiinh9289 2 ปีที่แล้ว +2

    Cho e hỏi, có 1 api lấy danh sách người dùng. Khi api bắt đầu được thực thi thì phát hiện access token hết hạn, khi đó server sẽ trả về code 401. Tiếp theo axios sẽ thực thi interceptor.response để lấy lại access token và set vào Locastorage thành công. Rồi làm sao cái api đó có thể tiếp tục chạy lại lần nữa để tự động lấy danh sách người dùng và hiện lên giao diện. Rõ ràng là Interceptor của axios chỉ có nhiệm vụ lấy lại token và gán vào Locastorage. Rất mong được admin và mọi người trả lời.

    • @anonystick
      @anonystick  2 ปีที่แล้ว

      Em xem lại phút 32:41, dòng 89.

    • @thiinh9289
      @thiinh9289 2 ปีที่แล้ว +1

      @@anonystick Hay quá, e cảm ơn ạ. 🤩. Thành công bước đầu hoàn thành cơ chế refresh token, tuy vẫn thiếu xót chưa hiểu mấy cú pháp và cơ chế hoạt động của thằng Interceptor axios lắm. Nhưng thực sự cảm ơn video của thầy rất nhiều.

    • @thiinh9289
      @thiinh9289 2 ปีที่แล้ว

      @@anonystick Có một vấn đề nữa, e chưa tìm được lời giải ở đâu, đó là. Khi 1 api "get" thì refresh token vẫn hoạt động bình thường. Nhưng 1 api "post" (api cần đưa dữ liệu lên server) được gọi mà token hết hạn. Sau đó Interceptor tiếp tục lấy token thành công. Nhưng khi api post được gọi lại thì dữ liệu req.body bị null hoàn toàn thì mình giải quết như thế nào vậy thầy.

    • @binhlethanh4121
      @binhlethanh4121 2 ปีที่แล้ว

      @@thiinh9289 Khả năng bạn chưa xử lý bất đồng bộ nên nó gửi lên trước khi token mới nó được gắn vào. trên server nó sẽ hiểu đó là null.

  • @rintran7350
    @rintran7350 2 ปีที่แล้ว +4

    Với cơ chế này thì accessToken được lưu vào Redis rất phù hợp để tăng tốc độ verify accessToken

  • @leucthinh3226
    @leucthinh3226 2 ปีที่แล้ว +1

    Cách này có kết hợp với blacklisted trên redis được không anh

    • @anonystick
      @anonystick  2 ปีที่แล้ว

      Qúa tốt luôn!

  • @quanphamanh957
    @quanphamanh957 ปีที่แล้ว +1

    file init_jwt này thường nằm trong folder nào ạ

  • @tuantech9943
    @tuantech9943 ปีที่แล้ว +1

    Unauthorized mà trả về 200 + response(code, message) thế có vi phạm quy chuẩn không anh nhỉ

    • @anonystick
      @anonystick  ปีที่แล้ว

      Có em, em xem lại file mà anh cung cấp httpStatusCode trên git nha em

  • @tamvongatvn1084
    @tamvongatvn1084 2 ปีที่แล้ว

    tuyệt vời anh ơi,

  • @tipsmooc
    @tipsmooc 3 ปีที่แล้ว +1

    Âm thanh và content quá tốt

  • @quanquan9356
    @quanquan9356 3 ปีที่แล้ว +8

    Mình thì không khuyến khích lắm với việc lưu cả AccessToken vào DB hoặc nơi nào đó trên server khi đã lưu RefreshToken dù đồng ý là nó sẽ dễ dàng revoke (nhưng đa số trường hợp là không cần thiết). Thứ 1 nó sẽ khiến cho ứng ụng stateful (trong Rest thì điều này là vi phạm). Thứ 2 thì với mỗi Request lên server đều phải check database hoặc cache để kiếm tra AccessToken (Đây lại là nhược điểm của Session so với JWT, vậy tại sao phải khiến JWT có thêm nhược điểm này ?). Tóm lại đây là quan điểm của mình, các bạn có thể tham khảo.

    • @atinh6205
      @atinh6205 2 ปีที่แล้ว +1

      Mình nghĩ là tùy yêu cầu hệ thống. sẽ có trường hợp cụ thể như sau :
      1. Mình cần loại bỏ tất cả access token và refresh token của 1 user cụ thể sau khi user bị deleted.
      2. Mình cần buộc phải loại bỏ tất cả access token và yêu cầu client refresh lại token để thay đổi roles/permissions trong token sau khi admin thay đổi roles/permissions của 1 user.

    •  ปีที่แล้ว

      Đồng ý, nếu phải lưu access token vào db thì m dùng session luôn cho rồi

  • @binhlethanh4121
    @binhlethanh4121 2 ปีที่แล้ว +1

    thầy ơi nó bị lỗi này là gì vậy ạ : Failed to execute 'setRequestHeader' on 'XMLHttpRequest' : is not a valid HTTP header field value

    • @anonystick
      @anonystick  2 ปีที่แล้ว

      Em đang send một text. Nên bỏ vào data ví dụ: method : "POST",
      data: {
      ...
      'text' : text
      }

    • @binhlethanh4121
      @binhlethanh4121 2 ปีที่แล้ว

      @@anonystick cũng ko được luôn thầy ơi. Em kiểm tra network thì thấy sau khi nó gọi refreshToken thành công, lưu trong localstorage cũng thành công xong nó dừng lại , ko thực hiện tiếp việc gọi lên server lấy users.🥲

  • @quanghiep9736
    @quanghiep9736 ปีที่แล้ว +1

    anh cho em hỏi nếu xử lý theo cơ chế này thì việc trả về refresh token sau khi login và lưu refresh token vào Redis có còn cần thiết không ạ ? thay vào đó sẽ chỉ lưu access token trong redis để dễ dàng revoke.
    em đang xử lý refresh token bằng cách, nếu token đó hết hạn, thì sẽ gửi request cấp access token mới với thông tin ng dùng (vd: email và id) -> check database nếu có thông tin người dùng tương ứng sẽ cấp token mới
    ok -> clone lại request trước đó đã failed (do lỗi 'jwt expired')
    fail -> logout
    theo a cách này có ổn không ạ ? rất mong được anh giải đáp

    • @anonystick
      @anonystick  ปีที่แล้ว +1

      Việc lưu RT vào database là để theo dõi có bị ai đó đánh cắp và dùng lại hay không?

    • @quanghiep9736
      @quanghiep9736 ปีที่แล้ว

      @@anonystick anh cho e hỏi, nếu sử dụng refresh token được tạo ra khi đăng nhập để xác thực người dùng sau đó cấp lại access token mới nếu access token đó hết hạn, vậy trong trường hợp refresh token đó hết hạn sẽ bắt người dùng phải đăng nhập lại ạ ?

  • @angVanHuy-tf2rv
    @angVanHuy-tf2rv 2 ปีที่แล้ว +1

    ko có bước gọi lại api cũ khi refreshtoken thành công à a

  • @nguyentrongnam
    @nguyentrongnam 2 ปีที่แล้ว +1

    Thầy cho em hỏi nếu Refresh Tokens hết hạn thì chuyện gì sẽ xảy ra ạ?

    • @anonystick
      @anonystick  2 ปีที่แล้ว

      Login lại từ đầu và nếu thành công cấp lại 2 loại token

  • @NhacMuiTet
    @NhacMuiTet 2 ปีที่แล้ว +1

    Góp ý cho bác là nên up lên github để ae xem nữa coi cứ loạn lên ạ

    • @anonystick
      @anonystick  2 ปีที่แล้ว +1

      Mấy video đầu quên mất. xl anh em

    • @NhacMuiTet
      @NhacMuiTet 2 ปีที่แล้ว

      @@anonystick dạ

  • @binhlethanh4121
    @binhlethanh4121 2 ปีที่แล้ว +1

    thầy ơi nếu mình lưu accessToken ở Redux store và refreshToken ở cookies thì có tốt không ạ

    • @anonystick
      @anonystick  2 ปีที่แล้ว

      Tốt nhất là cookies

  • @techcoffee1684
    @techcoffee1684 3 ปีที่แล้ว +2

    video của thầy tốt quá, thầy có thể nào làm video chỉ cách, quy ước đặt tên biến hay tên hàm sao cho chuẩn để đi làm được k ạ.

  • @maicaotri3668
    @maicaotri3668 3 ปีที่แล้ว +3

    Thầy ơi, cho em hỏi trong video hình như bị thiếu bước 4 đúng không ạ, vì sau khi refreshToken để có accessToken mới rồi thì sẽ tiếp tục gọi cái api cũ tiếp để get resource đúng không ạ. Nếu chỉ đến bước 3 là lấy token xong rồi set vào local storage là người dùng click get data xong thì UI nó đứng im, phải click thêm một cái nữa thì nó mới get được data thì phải.

    • @anonystick
      @anonystick  3 ปีที่แล้ว +3

      Không cần bước 4. Nó tự động chạy lại api trước đó nếu get token thành công. Vậy nới hay chứ, nếu không dở ẹc à

    • @uchung2890
      @uchung2890 2 ปีที่แล้ว

      @@anonystick thầy cho em hỏi cơ chế tại sao nó chạy lại vs thầy

    • @RinkaMizuki
      @RinkaMizuki ปีที่แล้ว

      @@uchung2890 này do interceptors của axios hỗ trợ tận răng rồi b .

    • @PhongNguyen-ho7oj
      @PhongNguyen-ho7oj ปีที่แล้ว

      Bạn có thể để ý là chúng ta đang gọi trong intercepter để check phần acceesstoken hết hạn và suy nghĩ tiếp nha bạn

    • @khanhnguyen-ds2pp
      @khanhnguyen-ds2pp 11 หลายเดือนก่อน

      @@PhongNguyen-ho7oj Bạn có thể giải thích cụ thể được không, mình đang chưa hiểu sao mà sau khi chạy refeshToken thì data trả về là success mà vẫn vào qua 2 cái check if đó

  • @softwareanddesign6641
    @softwareanddesign6641 3 ปีที่แล้ว +1

    Âm thanh chất lượng rồi

  • @maicaotri3668
    @maicaotri3668 3 ปีที่แล้ว +3

    thầy ơi cho em hỏi là tự trả về token mới mỗi lần hết hạn như vậy thì khi mình đưa token cho người khac hoặc lỡ lưu token ở một máy tạm nào đó là cái máy đó luôn truy cập vào được tài khoản của mình đúng không ạ? Vì dù token có hết hạn thì nó cũng tự refresh lại mà đúng không thầy, vậy hết hạn cũng giống như không hết hạn đúng không ạ thầy.

    • @tipsmooc
      @tipsmooc 3 ปีที่แล้ว

      Đây là cách làm mới thôi. Chứ để mất thì phải làm thêm cách khác

    • @quocdungnguyen615
      @quocdungnguyen615 2 ปีที่แล้ว

      cùng thắc mắc

    • @quocdungnguyen615
      @quocdungnguyen615 2 ปีที่แล้ว

      @@tipsmooc cách nào hả bạn

  • @baobaostore
    @baobaostore 2 ปีที่แล้ว +1

    Vậy nếu mất *access token* và *refresh token* thì có nghĩa người khác có khả năng truy cập vào tài khoản của mình mãi mãi đúng không vậy anh?

    • @atinh6205
      @atinh6205 2 ปีที่แล้ว +2

      nhiều hệ thống yêu cầu bảo mật cao sẽ có kiểm tra devices và ip nữa

  • @lequan4689
    @lequan4689 2 ปีที่แล้ว +1

    Thưa anh, nhược điểm có phải là nếu bị lộ token thì hacker sẽ chiếm quyền user mãi mãi không ạ. Mong anh phản hồi comment của em, chúc anh sức khoẻ.

    • @anonystick
      @anonystick  2 ปีที่แล้ว +1

      Thật ra nếu Token bị chiếm thì không thể mãi mãi được. Nếu AccessToken bị lộ thì sẽ hết hạn nhanh vì sao lại hết hạn nhanh thì bạn xem lại video trước, còn FreshToken (FT) mà bị lộ thì nguy hiểm hơn chút nhưng không có nghĩa là chiếm mãi mãi, vì hệ thống được bảo mật tốt sẽ cho chúng ta biết FT được truy cập ở một thiết bị lạ or một location khác...

    • @lequan4689
      @lequan4689 2 ปีที่แล้ว +2

      Vâng cám ơn anh, em cũng nghĩ là khi tạo token cần bổ sung các định danh phụ như IP, Divice, Location ... nếu phát hiện token được requets từ định danh không trùng khớp với lúc tạo sẽ block token luôn hoặc yêu cầu Xác thực hai yếu tố (2FA)

    • @anonystick
      @anonystick  2 ปีที่แล้ว

      @@lequan4689 OK em!

  • @TuanAnh-yl9rx
    @TuanAnh-yl9rx 2 ปีที่แล้ว +1

    ví dụ có 100 request trên fe hết hạn cùng lúc thì mình có thể chỉ cho 1 request refresh token xuống server rồi 99 thằng kia đợi lấy từ thằng 1 rồi xài chung được không a?

  • @brucenguyen3806
    @brucenguyen3806 3 ปีที่แล้ว

    Cho mình hỏi ngu phát: sao thấy refresh token dễ cấp vậy ạ? mình rất hứng thú với series này. mong đc ra nhiều video hơn ạ

    • @anonystick
      @anonystick  3 ปีที่แล้ว +1

      Không dễ đánh cắp, do anh em mình bất cẩn trong khi triển khai thôi. kakak

  • @hikaru8157
    @hikaru8157 2 ปีที่แล้ว

    anh làm video tiếp theo về xử lý nhiều request có token hết hạn được không ạ, em đang gặp vấn đề chỗ này hic

  • @vuthanh-pr1xn
    @vuthanh-pr1xn 2 ปีที่แล้ว

    E chào a, a cho e hỏi a có video nói về vấn đề token hết hạn và có nhiều request đồng thời lúc đó k ạ

  • @tinvo5369
    @tinvo5369 2 ปีที่แล้ว

    anh ơi, video tiếp theo của anh về xử lý nhiều request có token hết hạn ra chưa ạ?

  • @cheng6630
    @cheng6630 3 ปีที่แล้ว +3

    Anh nghĩ sao về việc token sẽ lưu ở local còn refreshtoken lưu ở cookie, khi gửi request lên thì gửi cả 2 thằng này,...nếu hết hạn thì server tự lấy refreshtoken trong cookie gửi lên để làm mới lại token gửi về lại cho client ạ?

    • @tienlam5599
      @tienlam5599 2 ปีที่แล้ว +1

      Mình cũng thấy cách này khá ổn. Vì lưu ở cookie sẽ bảo mật hơn cho refreshtoken . Không biết ý kiến thầy ntn mong thầy phản hồi.

    • @maicaotri3668
      @maicaotri3668 2 ปีที่แล้ว

      cùng thắc mắc luôn ạ

    • @hunghung-mu6se
      @hunghung-mu6se 2 ปีที่แล้ว +1

      Mình nghĩ vì session chỉ lưu đc trên 1 server . Mà hiện nay 1 web có nhiều server vì vậy để login 1 ở 1 server bất kỳ , mà tất cả server biết thì cách hiện nay là dùng jwt. ,mà khi request lên server (chưa biết server nào ) thì làm sao lấy đc refreshtoken. Mình có sai gì mong mọi người góp ý . Mình cảm ơn

    • @binhlethanh4121
      @binhlethanh4121 2 ปีที่แล้ว

      @@hunghung-mu6se BAN NEN TIM HIEU VE SSO single sign on nhe.

    • @codemuzik
      @codemuzik ปีที่แล้ว

      @@hunghung-mu6se cái này bạn lưu refreshToken vào redis, service nào cần thì request tới redis đó để lấy refreshToken để authen thôi, còn SSO là khác nữa =]