Đây là kế hoạch của tôi (luồng mã ủy quyền) của việc triển khai logic đăng nhập/đăng ký đó. (Các bên thứ ba chỉ được cung cấp API OAuth2)Cách sử dụng OAuth2 để triển khai đăng nhập/đăng ký của bên thứ ba?
Đầu tiên là frontend SPA sẽ gửi một yêu cầu GET đến bên thứ ba
GET https://www.example.com/oauth2
client_id=dummyclient
redirect_uri=https://mysite/callback
response_type=code
scope=openid
Sau đó, nếu người dùng đồng ý để cung cấp cho anh/openid cô mysite sau đó fronend sẽ nhận được phản hồi HTTP 301.
---> 301 https://mysite/callback?code=dummycode
Sau đó trình duyệt sẽ chuyển hướng trang để mysite/callback
và nó sẽ tải lại SPA và vạch trần các mã trong URL mà có thể được chụp bởi các SPA sau đó nó sẽ gửi mã để gọi lại backend thực.
GET https://mysite/api/real-callback?code=dummycode
Khi chương trình phụ trợ nhận mã, mã sẽ gửi mã cho bên thứ ba để trao đổi access_token
. Khi chương trình phụ trợ nhận được access_token
, nó sẽ kích hoạt yêu cầu API để có được openid của người dùng sau đó quyết định có cho phép người dùng đăng nhập hoặc đăng ký làm người dùng mới hay không. Cuối cùng, nó sẽ trả lại phản hồi HTTP cho lối vào SPA của chúng tôi chứa số access_token
trong số hệ thống OAuth2 hoặc 401 phản hồi trái phép của tôi.
Vì vậy, câu hỏi của tôi là làm thế nào để chứng minh rằng callback thực được gọi bởi khách hàng của riêng tôi (Bởi vì nếu một số kẻ tấn công có được lối vào của tôi nhúng client_id
sau đó ông có thể giả mạo yêu cầu OAuth2 và lừa đảo người sử dụng đồng ý. Sau đó Cuối cùng, anh ta sẽ nhận được mã số access_token
của người dùng trong hệ thống của tôi.) Làm cách nào tôi có thể sử dụng OAuth2 để xác thực mà không có người dùng cuối cung cấp thêm thông tin như mật khẩu.
Lý do của bạn để không có URL 'gọi lại thực sự 'làm URL chuyển hướng từ máy chủ OAuth2? Tôi không thấy bất kỳ lý do nào để lấy mã auth tới lối vào SPA. –
@ JánHalaša Ngay cả khi không có bước này, vấn đề bảo mật vẫn tồn tại miễn là tôi gửi lại 'access_token' của hệ thống của tôi đến giao diện người dùng sau yêu cầu gọi lại OAuth2 của bên thứ ba. Lý do tôi thiết kế gọi lại thực là tôi muốn đạt được sự tách biệt thực sự giữa giao diện người dùng và phụ trợ. – bitweaver
Và bạn cần 'access_token' trong SPA? –