2014-09-04 36 views
7

Tôi đang phát triển một ứng dụng bằng cách sử dụng ASP.NET MVC 5.2.2, Web API 2.2 and Katana/OWIN 3.0. Ứng dụng sử dụng ASP.NET Identity 2.1 cho các tài khoản và cơ sở dữ liệu cục bộ.Sử dụng Mã thông báo truy cập bên ngoài hoặc Mã thông báo truy cập cục bộ

Tôi đang sử dụng OAuth Authorization Server để tạo mã thông báo truy cập và làm mới. Tôi có các ứng dụng Android và iOS sử dụng máy chủ ủy quyền oauth cục bộ của mình. Ứng dụng Android và iOS sử dụng SDK để đăng nhập bằng Facebook, Google, v.v. Sau đó, các ứng dụng sẽ gửi mã thông báo truy cập (Facebook/Google/etc) đến máy chủ. Máy chủ sẽ xác thực mã thông báo truy cập bằng Facebook/Google/v.v.

Nếu đó là hợp lệ sau đó,

1) Tôi có nên tạo ra chứng cứ truy cập địa phương mới (trong Auth header) để ứng dụng cho tất cả các yêu cầu trong tương lai?

2) Ứng dụng có gửi cho tôi/Facebook/Gmail/etc mã thông báo truy cập (trong tiêu đề Auth) mỗi lần và máy chủ xác thực mã thông báo truy cập với Facebook/Gmail/etc mỗi lần?

3) Nếu truy cập cục bộ mã thông báo hết hạn, khi đó máy chủ đang sử dụng mã thông báo làm mới để tạo mã thông báo truy cập mới. Nếu máy chủ cập nhật mã thông báo truy cập cũng như mã thông báo làm mới trong thời gian này hoặc cập nhật mã thông báo truy cập là đủ?

+0

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. –

+0

@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

Trả lời

15

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.

+0

Tôi đồng ý với điều này. Để # 3 câu trả lời là ít phức tạp hơn. Luồng Oauth dành cho thiết bị di động không bao gồm mã thông báo làm mới, cho dù bạn sử dụng mã thông báo mang hay mã thông báo truy cập thực sự không giúp bạn. Bạn có thể phải xây dựng một cái gì đó vào giao thức của bạn để làm việc trong một mã thông báo mang mới. –

+0

Vui lòng đọc câu hỏi đầy đủ của tôi. – user960567

+0

Tôi đang sử dụng thiết bị di động Gốc? Come-on – user960567

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