sau khi xác thực mã thông báo truy cập bên ngoài của nhà cung cấp xã hội, bạn cần trao đổi mã thông báo truy cập bên ngoài này với mã thông báo truy cập cục bộ do máy chủ ủy quyền của bạn cấp (Chính quyền địa phương) cấp. Tất cả chi tiết cho việc triển khai này có thể được tìm thấy tại đây: http://bitoftech.net/2014/08/11/asp-net-web-api-2-external-logins-social-logins-facebook-google-angularjs-app/ Hãy cho tôi biết nếu điều này có ích.
Dưới đây là các bước chính xác mà tôi đã theo sau để thay đổi mã thông báo truy cập bên ngoài bằng các vấn đề mã thông báo truy cập của Local Authority. Giao diện người dùng là ứng dụng AngularJS. Bạn có thể kiểm tra ứng dụng demo tại đây và xem cách tôi truy cập api trên web bằng mã thông báo truy cập Facebook http://ngauthenticationweb.azurewebsites.net/
1- Ứng dụng AngularJS gửi yêu cầu HTTP GET đến điểm cuối ẩn danh (/ ExternalLogin) được xác định trong API back-end của chúng tôi chỉ định client_id, redirect_uri, response_type. 2- Khi điểm cuối nhận được yêu cầu GET, nó sẽ kiểm tra xem người dùng có được xác thực hay không và giả sử anh ta không được xác thực, vì vậy nó sẽ thông báo cho phần mềm trung gian chịu trách nhiệm cho nhà cung cấp bên ngoài được yêu cầu chịu trách nhiệm cuộc gọi này, trong trường hợp của chúng tôi, đó là Google.
3- Màn hình chấp thuận cho Google sẽ được hiển thị và người dùng sẽ cung cấp thông tin đăng nhập Google của anh ấy để xác thực.
4- Google sẽ gọi lại API back-end của chúng tôi và Google sẽ đặt cookie bên ngoài chứa kết quả xác thực từ Google (chứa tất cả các xác nhận quyền sở hữu từ nhà cung cấp bên ngoài cho người dùng).
5- Phần mềm trung gian của Google sẽ liệt kê một sự kiện có tên là "Được xác thực", nơi chúng tôi sẽ có cơ hội đọc tất cả các xác nhận quyền sở hữu bên ngoài do Google đặt. Trong trường hợp của chúng tôi, chúng tôi sẽ quan tâm đến việc đọc xác nhận quyền sở hữu có tên là “AccessToken” đại diện cho Mã thông báo truy cập của Google, nơi tổ chức phát hành khiếu nại này không phải là LOCAL AUTHORITY, vì vậy chúng tôi không thể sử dụng mã thông báo truy cập này trực tiếp để ủy quyền cuộc gọi API end-end endpoints.
6- Sau đó, chúng tôi sẽ đặt mã thông báo truy cập bên ngoài của nhà cung cấp bên ngoài làm xác nhận quyền sở hữu tùy chỉnh có tên "ExternalAccessToken" và phần mềm trung gian của Google sẽ chuyển hướng ngược lại (/ ExternalLogin).
7- Bây giờ người dùng được xác thực bằng cookie bên ngoài, vì vậy chúng tôi cần kiểm tra xem client_id và redirect_uri được đặt trong yêu cầu ban đầu có hợp lệ không và máy khách này được định cấu hình để chuyển hướng cho URI được chỉ định.
8- Bây giờ mã kiểm tra nếu user_id bên ngoài cùng với nhà cung cấp đã được đăng ký làm tài khoản cơ sở dữ liệu cục bộ (không có mật khẩu), trong cả hai trường hợp, mã sẽ phát 302 chuyển hướng đến URI được chỉ định trong tham số redirect_uri, URI sẽ chứa thông tin sau (“Mã thông báo truy cập bên ngoài”, “Tài khoản cục bộ”, “Nhà cung cấp”, “Tên người dùng bên ngoài”) dưới dạng đoạn mã băm URL không phải là chuỗi truy vấn.
9 Khi ứng dụng AngularJS nhận được phản hồi, nó sẽ quyết định dựa trên nó nếu người dùng có tài khoản cơ sở dữ liệu cục bộ hay không, dựa trên nó sẽ đưa ra yêu cầu tới một trong các điểm cuối (/ RegisterExternal hoặc/ObtainLocalAccessToken). Cả hai điểm cuối đều chấp nhận mã thông báo truy cập bên ngoài sẽ được sử dụng để xác minh và sau đó sử dụng mã thông báo này để nhận mã thông báo truy cập cục bộ do LOCAL AUTHORITY cấp. Mã thông báo truy cập cục bộ này có thể được sử dụng để truy cập các điểm kết thúc bảo mật API back-end của chúng tôi.
Như tôi đã hiểu, bạn đang xác thực ứng dụng Android/iOS của mình với Google/Facebook. Sau khi nhận được access_token từ các dịch vụ của bên thứ ba này, máy chủ của bạn sẽ xác thực lại mã thông báo với Google/Facebook. Sau đó, mục đích của lần xác thực thứ hai này là gì? Có phải nó đang hoạt động (máy chủ xác thực mã thông báo truy cập Android/Facebook cho Google/Facebook) không? Tôi đã không bao giờ thử, nhưng nó khá lạ cho tôi để hiểu, xem xét cách truy cập mã thông báo được tạo ra. –
@Freerider, tôi đang sử dụng OAUTH Server (xem liên kết ở trên) với Xác thực Bearer. Khi người dùng đăng nhập, tôi cần tạo mã thông báo truy cập từ máy chủ oauth của mình. – user960567