2014-12-08 24 views
6

Tôi muốn sử dụng máy chủ OpenID Connect (OIDC) tự lưu trữ kết hợp với JWT làm mã thông báo ủy quyền (mã thông báo truy cập trong điều khoản OIDC). JWT sẽ được sử dụng để bảo vệ các dịch vụ REST trong khi giao diện người dùng là sự kết hợp giữa các ứng dụng đơn và cổ điển (Góc). Bằng cách này, lớp còn lại sẽ có thể làm việc uỷ quyền dựa trên một JWT stateless thẻ nên không có kết nối DB thêm là cần thiết, như mô tả ở đây:OpenID Kết nối với JWT Tokens không trạng thái

https://auth0.com/blog/2014/01/07/angularjs-authentication-with-cookies-vs-token/

Đối với một ứng dụng trang duy nhất, OIDC Implicit Flow là thích hợp. Tuy nhiên, tôi thấy một vấn đề bảo mật khi luồng Implicit được sử dụng kết hợp với mã thông báo JWT không quốc tịch: Mã được phân phối dưới dạng phần phân đoạn trong URL có nghĩa là không có cách nào để xóa chúng (chúng dễ dàng có sẵn trong lịch sử trình duyệt) chúng (chúng không có quốc tịch) -> không thể đăng xuất được.

tôi thấy 2 lựa chọn để giảm thiểu này:

  1. Sử dụng một thẻ rất ngắn ngủi (tối đa lên đến vài phút). Điều này có thể gây trở ngại đáng kể cho khả năng sử dụng.
  2. Sử dụng quy trình mã ủy quyền bằng phương tiện AJAX. Đây là không tuân thủ O2C nhưng sẽ thực hiện đăng xuất có thể do mã thông báo sẽ không được hiển thị trong URL.

Tùy chọn thứ ba là từ bỏ mã thông báo JWT không quốc tịch và sử dụng mã thông báo mang đơn giản với kiểm tra DB.

Tôi có bỏ lỡ điều gì đó không? Bạn sẽ chọn những gì?

Trả lời

1

người ta có thể tranh luận về nguy cơ mảnh vỡ kết thúc trong lịch sử trình duyệt, nhưng "đơn giản" tokens bearer đục sẽ phải chịu những hạn chế tương tự mà bạn mô tả cho JWT mã thông báo

sử dụng một dòng mã với AJAX chắc chắn là không bị ngăn chặn bởi đặc tả OpenID Connect để bạn có thể sử dụng nó; luồng ngầm ẩn chỉ là đề xuất cho khách hàng trong trình duyệt vì nó tối ưu hóa số lượng chuyến đi khứ hồi để nhận mã thông báo cho đại lý người dùng

+0

Mã thông báo hiển thị đơn giản có thể bị người dùng thu hồi một cách rõ ràng, ít nhất về mặt lý thuyết. Trong thực tế, điều này là không chắc chắn mặc dù. –

+0

đồng ý, nhưng quan điểm của tôi là về nhưng chúng kết thúc trong lịch sử trình duyệt theo cùng cách với mã thông báo JWT, với khả năng chúng được sử dụng lại trước khi chúng bị thu hồi (hãy tưởng tượng đóng trình duyệt hoặc thậm chí làm rơi nó) –

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