thắc mắc Tại sao mọi người hay dùng JWT cho authentication?

Dần dà thì mình thấy session hay jwt nó cũng na ná nhau cả, quanh đi quẩn lại đám authen thì cũng chỉ có mấy cái cơ chế đó, 1 là 2 bên tham gia, 2 là 3 bên tham gia.
Nói session thì phải rõ ý session đang đặt trong context nào để dễ bóc tách vấn đề.
Ví như local session trên mỗi server, thì sẽ phát sinh bài toán khi có nhiều server, thì session A được cấp bởi server A nhưng lại request tới server B.
Lúc đó thì lại giải pháp là dùng 1 con load balancer bên trên, lúc này lại ra đời trò sticky session để biết session được cấp bởi thằng nào thì sẽ redirect tới thằng đó.
Rồi thấy dườm dà quá, lại sinh ra thằng "shared session", kiểu như lưu session ở 1 cái db chung nào đó như redis chẳng hạn.
Rồi lại thấy cũng chưa thon gọn, lại đẩy việc authen cho thằng gateway làm luôn, đám service thì khỏi cần check lại.
ko tạo ra vấn đề mới thì dev kiếm tiền kiểu gì bác :shame:
 
Dear các anh em

Nhận thấy nguồn tài nguyên để học tập lập trình bằng Tiếng Việt ở VN còn hạn chế nên mình có tạo một kênh youtube bằng Tiếng Việt để chia sẻ những kinh nghiệm mình có được trong suốt thời gian làm việc.

Với tôn chỉ là những kiến thức mới nhất có thể áp dụng vào thực tiễn.

Rất mong anh em ủng họ và đóng góp ý kiến. Thanks all

Khóa học lập trình Java Spring boot 3 cho người mới
https://www.youtube.com/playlist?list=PL2xsxmVse9Ibe6ZGXUTOfz52RO6xJkhmT
 
Dear các anh em

Nhận thấy nguồn tài nguyên để học tập lập trình bằng Tiếng Việt ở VN còn hạn chế nên mình có tạo một kênh youtube bằng Tiếng Việt để chia sẻ những kinh nghiệm mình có được trong suốt thời gian làm việc.

Với tôn chỉ là những kiến thức mới nhất có thể áp dụng vào thực tiễn.

Rất mong anh em ủng họ và đóng góp ý kiến. Thanks all

Khóa học lập trình Java Spring boot 3 cho người mới
https://www.youtube.com/playlist?list=PL2xsxmVse9Ibe6ZGXUTOfz52RO6xJkhmT

Cám ơn
 
Dear các anh em

Nhận thấy nguồn tài nguyên để học tập lập trình bằng Tiếng Việt ở VN còn hạn chế nên mình có tạo một kênh youtube bằng Tiếng Việt để chia sẻ những kinh nghiệm mình có được trong suốt thời gian làm việc.

Với tôn chỉ là những kiến thức mới nhất có thể áp dụng vào thực tiễn.

Rất mong anh em ủng họ và đóng góp ý kiến. Thanks all

Khóa học lập trình Java Spring boot 3 cho người mới
https://www.youtube.com/playlist?list=PL2xsxmVse9Ibe6ZGXUTOfz52RO6xJkhmT
Thank bac 😍
 
Hồi mới tìm hiểu jwt, cũng thấy nó màu hồng lắm, kiểu tự self verify thì không cần phải IO check chỗ khác nữa. Nhưng sau gặp nhiều case mới thấy không như là mơ.
Vì self verify thì chỉ có check signature với kiểm tra expire time. Vậy làm thế nào để invalid 1 token?
Ví dụ như mobile dùng jwt để authen vào server, vậy giờ server làm sao để force logout token đó đi? Giải pháp chấp vá là giảm expire time xuống, khi đó thì sẽ luôn có 1 khoảng delay time, mà như vậy với case end user thì quá fail. Giải pháp thứ 2 là vẫn phải lưu cái token đó vào chỗ nào đó để check :LOL:. Chỉ có điều là thay vì thằng app business phải tự code việc lưu token vào db rồi code đoạn check, thì giờ nó đẩy việc này cho mấy thằng gateway hoặc thằng authen server (không phải việc của coder ae mình). Lúc này nó ra đời khái niệm là "introspection token", nôm na là vẫn phải IO ra đâu đó để check.

Cái lợi ích khác của jwt ít người nói, đó là "claim value", tức là thông tin user có trong token luôn, claim token ra để lấy :3, nhưng cái dở của jwt đó là phần payload nó là encode (nhắc lại là encode chứ ko phải encrypt). Bọn nó mang 1 tư tưởng là "tao cho mày xem thông tin của tao đó, nhưng mày có xem được, cũng chả fake được đâu". Chính cái tư tưởng này mà có thằng PASETO ra đời, đáng tiếc cho PASETO là hồi mình nghiên cứu nó thì nó còn khá mới, chưa phổ biến.

Mục đính chính của introspect api k phải để validate token hay force logout mà là để protect thông tin structure của jwt token. Khi có introspect api thì resource server sẽ trả về cho user cái bearer token là 1 chuỗi ký tự random chứ k phải là full jwt. Vì service k đọc trực tiếp được cái bearer token này nên cần introspect api, nó sẽ convert cái bearer token về jwt token, validate và trả về payload của cái jwt token.
Nếu resource server trả về cái jwt token thì chả cần introspect api làm gì, service tự check dc cái token đó qua exp với lại iss rồi :big_smile:.
Còn force logout token thì đơn giản delegate sang gateway. Gateway sẽ cache cái token đó, khi user logout chỉ cần remove cái cache đó ra là xong :).
Introspect API cũng convert bearer token sang jwt token cũng từ cache của gateway chứ k phải từ database hay đâu đó đâu.
 
Mình mới làm thêm các video về cách tạo JWT token, authentication và authorization với JWT token nhà trồng. Anh em xem cho mình xin ý kiến với nhé. Thanks

Khóa học Java spring boot 3: JWT là gì, cách tạo, ký và xác thực một JWT

Khóa học Java spring boot 3: Kiến trúc Spring Security, cấu hình Authentication với JWT

Khóa học Java spring boot 3: Phân quyền (Authorization) bằng JWT trong Spring Security
 
các bác cho em hỏi nếu em làm kiểu này thì có dùng jwt đc ko ạ?
JWT chỉ đóng vai trò xác nhận user đang đăng nhập thôi, còn với việc phân quyền thì nên nằm phía BE validate mỗi request, vì việc thay đổi quyền của 1 user có thể khá thường xuyên, và nó yêu cầu phải invalidate cái request ngay sau khi quyền được thay đổi.
Vdu đơn giản là với JWT token thì bạn đăng nhập đc nhưng ko xem được, sau khi cập nhật quyền thì bạn xem được luôn mà ko cần logout vì việc xác định quyền hạn nằm phía server chứ không liên quan tới JWT
 
Dear các anh em

Nhận thấy nguồn tài nguyên để học tập lập trình bằng Tiếng Việt ở VN còn hạn chế nên mình có tạo một kênh youtube bằng Tiếng Việt để chia sẻ những kinh nghiệm mình có được trong suốt thời gian làm việc.

Với tôn chỉ là những kiến thức mới nhất có thể áp dụng vào thực tiễn.

Rất mong anh em ủng họ và đóng góp ý kiến. Thanks all

Khóa học lập trình Java Spring boot 3 cho người mới
https://www.youtube.com/playlist?list=PL2xsxmVse9Ibe6ZGXUTOfz52RO6xJkhmT
 
Dear các anh em

Nhận thấy nguồn tài nguyên để học tập lập trình bằng Tiếng Việt ở VN còn hạn chế nên mình có tạo một kênh youtube bằng Tiếng Việt để chia sẻ những kinh nghiệm mình có được trong suốt thời gian làm việc.

Với tôn chỉ là những kiến thức mới nhất có thể áp dụng vào thực tiễn.

Rất mong anh em ủng họ và đóng góp ý kiến. Thanks all

Khóa học lập trình Java Spring boot 3 cho người mới
https://www.youtube.com/playlist?list=PL2xsxmVse9Ibe6ZGXUTOfz52RO6xJkhmT
Video dài quá bác, nên rút gọn lại.
 
Back
Top