Chúng tôi có ứng dụng web thông thường với xác thực dựa trên cookie và giờ chúng tôi muốn tách giao diện người dùng và phụ trợ (api) để có API công khai của bên thứ ba. Vì vậy, chương trình phụ trợ của chúng tôi sẽ nằm trên một miền và giao diện người dùng trên một miền khác.OAuth/OpenID dựa trên trình duyệt với thông tin đăng nhập liên tục
Để ủy quyền, chúng tôi muốn chuyển đổi cho OAuth 2 with JWT. Trong trường hợp này ứng dụng front-end của chúng tôi sẽ phải sử dụng access_token thay vì phiên cookie và nó mang lại một câu hỏi lớn cũ:
Làm thế nào để vẫn đăng nhập - khét tiếng "Remember Me" Checkbox (phần II từ Form based authentication for websites)
Từ quan điểm OAuth2, ứng dụng giao diện người dùng của chúng tôi sẽ sử dụng thứ gì đó giữa Resource Owner Password Credentials Grant và Implicit Grant. Nó gần hơn với Thông tin xác thực mật khẩu cấp vì chúng tôi vẫn sẽ sử dụng biểu mẫu đăng nhập thông thường và sẽ không chuyển hướng người dùng đến một miền khác để đăng nhập. Đồng thời nó gần hơn với Ngụ ý tài trợ vì tất cả sẽ chỉ dành cho trình duyệt & JavaScript dựa trên khi access_token
sẽ được lưu trong trình duyệt.
Các RFC says máy chủ uỷ quyền PHẢI KHÔNG phát hành một thẻ refresh nếu bạn sử dụng Implicit Grant và câu hỏi của tôi là nếu nó vẫn còn hợp lệ trong trường hợp này sử dụng khi bạn không thực sự sử dụng một OAuth bên 3-d nhưng bạn api của riêng? Theo bản năng, tôi cảm thấy rằng có refresh_token
trong trình duyệt là lỗ hổng bảo mật và muốn xác nhận với bạn, nhưng refresh_token
có vẻ là cách duy nhất để đăng nhập liên tục hoạt động giống như cách chúng tôi có với cookie.
UPD sau khi bình luận @FlorentMorselli:
Các OpenID thông số kỹ thuật vẫn không trả lời câu hỏi của tôi nếu tôi có thể sử dụng refresh_token
với trình duyệt ứng dụng duy nhất
- Google says họ cung cấp
refresh_token
chỉ choaccess_type=offline
- OpenID Connect Core says bạn không thể sử dụng Mã thông báo làm mới với Dòng chảy ngầm định
- OpenI D Connect Lõi says gì về việc sử dụng
refresh_token
với lai luồng - Chỉ có one place nơi nó nói cái gì hứa hẹn về
refresh_token
với dòng Hybrid, nhưng không chính xác
UPD2 nhờ @reallifelolcat
Dường như OpenID Connect không hỗ trợ rõ ràng Resource Owner Password Credentials Grant, có nghĩa là bạn phải chuyển hướng người dùng tới máy chủ OpenID Connect để thực hiện đăng nhập. Bạn có biết liệu có cách nào khác để xác thực với thông tin xác thực người dùng qua OAuth 2.0 không?
Tôi tin api tách và frontend ngày càng phổ biến hơn những ngày này và tôi muốn đánh giá cao nếu bạn chia sẻ cách bạn giải quyết Persistent Đăng nhập vấn đề này và nếu bạn thả nó hoàn toàn và lực lượng người sử dụng để đăng nhập lại mỗi tuần X.
Cảm ơn!
OAuth2 không phải là giao thức xác thực, đây là giao thức ủy quyền. Nếu bạn muốn xác thực người dùng bằng OAuth2 và JWT, tôi khuyên bạn nên xem [Thông số kỹ thuật của OpenID Connect] (http://openid.net/connect/) –
@FlorentMorselli cảm ơn bạn đã liên kết, tôi đã mở rộng câu hỏi –
Ứng dụng dựa trên tác nhân người dùng là các ứng dụng khách công khai và chúng không có khả năng lưu trữ thông tin xác thực và mã thông báo làm mới của chúng. Đó là lý do tại sao những khách hàng này không thể phát hành mã thông báo làm mới. Ứng dụng gốc (ví dụ: ứng dụng Android) cung cấp "mức độ bảo vệ có thể chấp nhận". Đó là lý do tại sao họ có thể được phép nhận mã thông báo truy cập (xem https://tools.ietf.org/html/rfc6749#section-2.1). –