2017-05-31 20 views
8

Trên hầu hết các hướng dẫn JWT (Mã thông báo Web JSON) (ví dụ: thisthis) đang được xác minh.Hết hạn mã hóa Web JSON

Câu hỏi của tôi là, tình trạng người dùng không hợp lệ được duy trì như thế nào? Ý tôi là, cho phép nói rằng một khách hàng chỉ nhận được mã thông báo JWT hết hạn sau một tuần. Nhưng vì lý do rất cụ thể cho phép nói rằng chúng tôi đã quyết định vô hiệu hóa người dùng và không muốn người dùng truy cập vào API của chúng tôi. Nhưng người dùng đó vẫn có mã thông báo hợp lệ và người dùng có thể truy cập API.

Tất nhiên, nếu chúng tôi thực hiện chuyến đi khứ hồi tới DB cho mỗi yêu cầu thì chúng tôi có thể xác thực xem tài khoản hợp lệ hay không hợp lệ. Câu hỏi của tôi là, cách tốt nhất để chăm sóc loại tình huống này cho các mã thông báo tồn tại lâu dài là gì.

Xin cảm ơn trước.

Trả lời

0

RFC 7009 chỉ định Thu hồi mã thông báo OAuth 2.0. Về cơ bản bạn có một điểm cuối, nơi bạn có thể thu hồi access_tokens.

+1

bạn có thể có điểm cuối để thu hồi mã thông báo truy cập, nhưng câu hỏi của tôi là làm thế nào để bạn biết mã thông báo truy cập nào cần thu hồi? Vì chúng tôi không tham gia chuyến đi khứ hồi tới DB. –

0

Không rõ luồng OAuth bạn đang sử dụng từ câu hỏi của bạn hoặc bạn đang đề cập đến OpenID Connect thay vì Oauth.

Cân nhắc sử dụng mã thông báo làm mới và có thời gian hết hạn ngắn hơn nhiều trên mã thông báo truy cập của bạn - ví dụ: 30 phút.

Trong trường hợp này, người dùng (resource owner) không phải tiếp tục xác thực và API của bạn (Resource Server) không phải kiểm tra người dùng vẫn hợp lệ trên mọi yêu cầu. Sau khi mã thông báo truy cập hết hạn, client (ứng dụng gọi API của bạn) phải liên hệ với DB (Authorisation Server) và đổi mã thông báo làm mới cho mã thông báo truy cập mới - và thường là mã thông báo làm mới mới - cung cấp cho người dùng vẫn hợp lệ người dùng trên DB của bạn và người dùng đã không thu hồi quyền truy cập cho ứng dụng khách đối với dữ liệu của họ trên API.

Bạn cũng có thể sử dụng thu hồi mã thông báo như được đề xuất trong câu trả lời khác nếu máy chủ ủy quyền của bạn cho phép nhưng tôi sẽ thử mã thông báo làm mới và mã thông báo truy cập ngắn vì dễ thực hiện hơn và không gây ô nhiễm API của bạn với xác thực người dùng/các mối quan tâm về ủy quyền - công việc này được thực hiện tốt nhất bởi một máy chủ Auth.

+0

iandayman: Giới thiệu về luồng OAuth mà bạn sử dụng, bạn có thể tìm thấy nó trên thông số JWT (liên kết được đưa ra trên bài đăng chính). Điều tôi muốn biết là, cách nó được giải quyết trong cuộc sống thực. Tôi có nghĩa là từ FB tôi nhận được một mã thông báo có giá trị trong một năm. Bây giờ nếu tài khoản của tôi bị xóa sau một tuần thì mã thông báo sẽ không hợp lệ trong một năm. Câu hỏi của tôi là, việc kiểm tra này diễn ra như thế nào (nếu người dùng tồn tại hoặc hợp lệ) mà không tham gia chuyến đi khứ hồi tới DB? –

0

Đó là vấn đề chính khi bạn đang sử dụng JWT. Vì vậy, cách tiếp cận cơ bản tốt nhất trong trường hợp này là tạo danh sách đen trên cổng của bạn. Đây không phải là giải pháp tốt nhất cho quan điểm bảo mật nhưng đây chỉ là giải pháp tốt nếu bạn đang sử dụng JWT.

3

Rất khó để thu hồi mã thông báo truy cập dựa trên JWT nếu không phải là không thể.

Mã thông báo truy cập phải được trình bày như thế nào? Có hai cách chính.

  1. Như một chuỗi ngẫu nhiên vô nghĩa. Thông tin được liên kết với mã thông báo truy cập được lưu trữ trong bảng cơ sở dữ liệu phía sau máy chủ ủy quyền.
  2. Là chuỗi khép kín, là kết quả của việc mã hóa thông tin mã thông báo truy cập bằng base64url hoặc thông tin tương tự.

Lựa chọn giữa các cách này sẽ dẫn đến sự khác biệt do hậu quả như được mô tả trong bảng sau.

enter image description here

Xem "7. Truy cập Mã" trong "Full-Scratch Implementor of OAuth and OpenID Connect Talks About Findings" cho ưu và nhược điểm của cách tiếp cận đại diện tượng trưng.

Nếu mã thông báo truy cập của bạn dựa trên JWT, hệ thống của bạn phải (1) nhớ mã thông báo truy cập bị thu hồi cho đến khi hết hạn. Một sự thỏa hiệp khác là (2) tạo thời gian tồn tại của mã thông báo truy cập đủ ngắn và từ bỏ việc thu hồi chúng.

Cá nhân, sau khi xem xét, tôi không chọn JWT làm đại diện mã thông báo truy cập khi triển khai máy chủ ủy quyền (Authlete) vì rất khó/không thể thu hồi và cập nhật mã thông báo truy cập dựa trên JWT khi chúng được phát hành.

Các vấn đề liên quan