2014-06-06 11 views
20

अनुकूलित करें मैंने सफलतापूर्वक अपना कस्टम OAuthAuthorizationServerProvider लागू किया। लेकिन जब मैं लॉग इन करता हूं और टोकन पुनर्प्राप्त करता हूं, तो मेरे क्लाइंट को उपयोगकर्ता की भूमिकाओं, दावों, आदि का कोई विचार नहीं है।एस्पनेट पहचान 2: ओएथ एंडपॉइंट प्रतिक्रिया

मैंने वर्तमान में प्रिंसिपल के दावों की सूची वापस करने के लिए एक वेबपी नियंत्रक जोड़ा है, लेकिन मैं हूं उस से वास्तव में खुश नहीं है।

जब एक टोकन का अनुरोध करने, वर्तमान प्रतिक्रिया की तरह दिखता है:

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

क्यू> कैसे यह निम्नलिखित स्निपेट की तरह कुछ लौट कर सकते हैं?

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

मेरे प्रगति अब तक:

OAuthAuthorizationServerProvider#TokenEndpoint(OAuthTokenEndpointContext) के प्रलेखन का कहना है:

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.

मैं कैसे प्रतिक्रिया को अनुकूलित करने के किसी भी उदाहरण नहीं मिल सकता है, और एएसपी शुद्ध पहचान का स्रोत कोड अभी तक जारी नहीं किया गया है, इसलिए मैं काफी अटक गया हूं।

उत्तर

30

क्या आप 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

धन्यवाद, कि मैं वास्तव में क्या ढूंढ रहा था। मुझे विधि मिली लेकिन मुझे नहीं पता था कि प्रतिक्रिया में गुण कैसे जोड़ना है। मैं कोशिश करूँगा और जवाबों को स्वीकार करूंगा जो नौकरी – dgn

+1

आपका कोड अच्छी तरह से काम करता है, लेकिन जब मैं शीर्ष स्तर के मानों की बजाय वस्तुओं को वापस करने का प्रयास करता हूं, तो मुझे एक त्रुटि 500 ​​मिलती है। आईआईआरसी स्पेक (ओएथ 2 या कुछ के लिए) कहता है कि टोकन और सामान को शीर्ष स्तर के मान होना चाहिए, इसलिए मुझे लगता है कि यही कारण है। फिर भी मुझे उम्मीद थी कि कस्टम मूल्यों के लिए और अधिक स्वतंत्रता थी। वैसे भी, यह मेरे प्रश्न का उत्तर है, धन्यवाद! – dgn

+2

@scenario // ApplicationOauthProvider.cs फ़ाइल और इसके संबंधित उपयोग में 'CreateProperties' विधि देखें। – Youngjae

0

मेरा मानना ​​है कि आप OAuthAuthorizationServerProvider वर्ग पर TokenEndpointResponse ओवरराइड करने के लिए की जरूरत है:

public override Task TokenEndpointResponse(OAuthTokenEndpointResponseContext context) 
    { 
     context.AdditionalResponseParameters.Add("Key","Value"); 
     return base.TokenEndpointResponse(context); 
    } 
संबंधित मुद्दे