2014-10-31 12 views
5

Chúng tôi có OWA OAuth 2.0 hoạt động (nhờ this fantastic post) nhưng cần một số thông tin chi tiết hơn về quy trình thực tế chuyển đổi ClaimsIdentity thành chuỗi access_token thực tế trong phản hồi HTTP.Mã thông báo OWA OAuth 2 thực sự được tạo như thế nào?

Chúng tôi đang tạo ClaimsIdentity tại phương pháp này trong Provider OAuth Authorization của chúng tôi:

public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider 
{ 
    // <snip> 
    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
    { 
     // validation, user checking code here 

     var identity = new ClaimsIdentity(context.Options.AuthenticationType); 
     identity.AddClaim(new Claim("sub", context.UserName)); 
     identity.AddClaim(new Claim("role", "user")); 
     context.Validated(identity); 
    } 
} 

Và khi chúng ta thực hiện các yêu cầu HTTP POST như grant_type=password&username=user007&password=jamesbond (thư giãn, mật khẩu ở đây là ok), chúng tôi nhận được HTTP POST cơ thể phản ứng

{"access_token":"9K8VtOBseU0-XZfdGe2_urn2HESY3jLkpgvowOQFPXsHeWNOrTlTVzfPu35ZEvr4AqSj_b0laesBegtVWuR8R-aItnNXw4vXiuCg0cTNMUKP_yfi89VhD446o2X6ffL8upwZVILpomweSweIVlDmwUDzIwf1ZqubrQ8vuiQDFu-_7vpjPwJ5yVvomQ75agsJWMZk-H_bVWSObds82aM8LCRJwb2bUJchr6_L1GP8xdXqRQz24uDhHvco-XByyMSMzZm-Qo0VVBbocbgP64OJulbihVG_W9e8G69UfbX99pIYiLyE4jixiUtjOKSiMYBISW3_fg","token_type":"bearer","expires_in":1799,"as:client_id":"","userName":"user007",".issued":"Fri, 31 Oct 2014 16:02:05 GMT",".expires":"Fri, 31 Oct 2014 16:32:05 GMT"}

Câu hỏi: logic tạo ra thực tế access_token chuỗi là gì?

Một số vấn đề cụ thể trong câu hỏi

  1. cấu trúc nội bộ của rằng access_token chuỗi là gì?
  2. Được mã hóa hoặc ký hoặc cả hai? Khóa nào được sử dụng (giả sử IIS/Azure Cloud Service)?
  3. Làm cách nào chúng tôi có thể ghi đè việc triển khai tạo chuỗi thực tế được gửi đi và sau đó kiểm tra cùng một mã thông báo/chuỗi trên các lần truy cập tiếp theo?

Cảm ơn

Trả lời

8

Rất vui khi bài viết của tôi là hữu ích, hãy tìm câu trả lời như sau:

1 - Chuỗi này 'ma thuật' là một mã hóa hoặc ký string (poor MSDN documentation, nói mã hóa hoặc ký hiệu không rõ ràng) có chứa phiên bản được deserialized của tất cả các xác nhận quyền sở hữu và tài sản vé cho người dùng đã đăng nhập. Nếu ở chế độ IIS, việc mã hóa/ký sẽ được thực hiện thông qua các giá trị khóa "decryptionKey" và "validationKey" trong phím machine (documentation). Nếu chạy như một ứng dụng OWIN độc lập, mã hóa sử dụng DPAPI kế thừa để bảo vệ nó và thực sự sử dụng thuật toán 3DES lỗi thời (documentation). Việc triển khai mặc định cho nó là trong source code here.

2 - Đã trả lời tại điểm 1.

3 - Kiểm tra new post nơi tôi hiển thị như thế nào đến vấn đề ký Json web mã thông báo thay vì truy cập mặc định thẻ của tôi.

Hy vọng điều này sẽ trả lời câu hỏi của bạn.

+0

Đối với điểm thứ ba của mã thông báo tùy chỉnh, nếu thực hiện tùy chỉnh 'CustomTokenFormat: ISecureDataFormat ' và cung cấp nó cho thuộc tính 'AccessTokenFormat' của' OAuthAuthorizationServerOptions', cách thực thi xác thực của nó tại thời điểm truy cập? Điều đó có tự động xảy ra bằng cách cung cấp cùng một đối tượng 'OAuthAuthorizationServerOptions' (và do đó cùng' AccessTokenFormat') cho cả 'UseOAuthAuthorizationServer (..)' và 'UseOAuthBearerAuthentication (..)'? – DeepSpace101

+0

Bạn chính xác, điều này xảy ra tự động.Thời gian hết hạn cho mã thông báo truy cập được thiết lập bằng cách sử dụng thuộc tính 'AccessTokenExpireTimeSpan' trong' OAuthAuthorizationServerOptions' thì đây sẽ là một phần của thuộc tính dữ liệu 'AuthenticationTicket' nơi bạn có thể đọc thuộc tính' ExpiresUtc' trong lớp tùy chỉnh cho 'AccessTokenFormat' , bạn có thể kiểm tra tại đây: [link] (https://github.com/tjoudeh/JWTAspNetWebApi/blob/master/AuthorizationServer.Api/Formats/CustomJwtFormat.cs#l44-47) –

+0

@Taiseer Cách giải mã/xác nhận hợp lệ làm việc quan trọng với cân bằng tải trước nhiều phiên bản máy chủ? –

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