2014-06-06 15 views
20

Tôi đã triển khai thành công tùy chỉnh OAuthAuthorizationServerProvider của mình. Nhưng khi tôi đăng nhập và truy xuất mã thông báo, khách hàng của tôi không có bất kỳ ý tưởng nào về vai trò, xác nhận quyền sở hữu của người dùng, v.v.Nhận dạng AspNet 2: Tùy chỉnh phản hồi điểm cuối OAuth

Tôi hiện đã thêm bộ điều khiển webapi để trả lại danh sách xác nhận quyền sở hữu của hiệu trưởng, nhưng tôi không thực sự hài lòng với điều đó.

Khi yêu cầu một mã thông báo, phản ứng hiện nay trông giống như:

{ 
    access_token: "qefelgrebjhzefilrgo4583535", 
    token_type: "bearer", 
    expires_in: 59 
} 

Q> Làm thế nào có thể làm cho nó trở lại một cái gì đó giống như đoạn sau đây?

{ 
    access_token: "qefelgrebjhzefilrgo4583535", 
    token_type: "bearer", 
    expires_in: 59, 
    user: { 
     name: 'foo', 
     role: 'bar' 
    } 
} 

tiến bộ của tôi cho đến nay:

Các tài liệu của OAuthAuthorizationServerProvider#TokenEndpoint(OAuthTokenEndpointContext) nói:

Called at the final stage of a successful Token endpoint request. An application may implement this call in order to do any final modification of the claims being used to issue access or refresh tokens. This call may also be used in order to add additional response parameters to the Token endpoint's json response body.

tôi không thể tìm thấy bất kỳ ví dụ về cách tùy chỉnh các phản ứng, và asp-net Mã nguồn của danh tính chưa được phát hành, vì vậy tôi khá mắc kẹt.

Trả lời

30

Có thể bạn đang tìm kiếm ghi đè phương thức TokenEndpoint của OAuthAuthorizationServerProvider.

public override Task TokenEndpoint(OAuthTokenEndpointContext context) 
{ 
    foreach (KeyValuePair<string, string> property in context.Properties.Dictionary) 
    { 
     context.AdditionalResponseParameters.Add(property.Key, property.Value); 
    } 

    return Task.FromResult<object>(null); 
} 
+0

Cảm ơn, đó là chính xác những gì tôi đang tìm kiếm. Tôi đã tìm thấy phương pháp nhưng tôi không biết cách thêm thuộc tính vào phản hồi. Tôi sẽ thử điều đó và chấp nhận câu trả lời nó thực hiện công việc – dgn

+1

Mã của bạn hoạt động tốt, nhưng khi tôi cố gắng trả về các đối tượng thay vì giá trị cấp cao nhất, tôi gặp lỗi 500. IIRC spec (cho OAuth2 hoặc cái gì đó) nói rằng mã thông báo và nội dung phải là các giá trị cấp cao nhất, vì vậy tôi đoán đó là lý do tại sao. Tôi vẫn hy vọng có nhiều tự do hơn cho các giá trị tùy chỉnh. Dù sao, đó là câu trả lời cho câu hỏi của tôi, Cảm ơn! – dgn

+2

@scenario // Kiểm tra phương thức 'CreateProperties' trong tệp ApplicationOauthProvider.cs và cách sử dụng liên quan của nó. – Youngjae

0

Tôi tin rằng bạn cần phải ghi đè TokenEndpointResponse trên OAuthAuthorizationServerProvider lớp:

public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context) 
    { 
     context.AdditionalResponseParameters.Add("Key","Value"); 
     return base.TokenEndpointResponse(context); 
    } 
Các vấn đề liên quan