2013-10-28 6 views
24

जब मैं एएसपीनेट वेबपै 2 में ओएथ प्रमाणीकरण सर्वर सेट करता हूं 2 मैं जेसन को स्वीकार करने के लिए टोकन एंडपॉइंट कैसे सेट कर सकता हूं, फिर एक फॉर्म एन्कोडेड पोस्ट?आप जेसन प्रारूप में टोकन अनुरोधों को अनुमति देने के लिए कटाना-प्रोजेक्ट कैसे सेट करते हैं?

नमूना का उपयोग http://www.asp.net/web-api/overview/security/individual-accounts-in-web-api

मैं

{ 
"grant_type":"password", 
"username":"Alice", 
"password":"password123" 
} 

मैं प्रतिक्रिया जहां आवेदन की किसी सामग्री प्रकार के रूप में 400 गलत अनुरोध

{ 
    "error" : "unsupported_grant_type" 
} 

प्राप्त के साथ आवेदन/json भेजने की कोशिश की/x-www-form-urlencoded औरका निकाय 10 अपेक्षित के रूप में काम करता है।

200 ठीक

{ 
    "access_token" : "08cQ33ZG728AqBcj1PBsRSs4iBPc02lLCZfpaRRWLx2mH_wpQzMwGDKS7r7VgJiKUjUFaq6Xv0uguINoiB_evVbVOtvyWaqAYvc0HRjlgrbj12uQqFbUB7bgH-jiyfhumkwuTSTVHfKUhBjCuD_pbyxEbu2K5WSJpUVge_SGxnb-htm4ZNf1qKDmpEnP9IpZVeJa-KnV0m0gEmP04slMW_JrO390LzCNvXZwVk1yMNuvDakk8tWX7Y6WkFoh7vtW6xfhw3QMbmnvS6px70yMWcTksRNG2bdmi4SenhuRTJx8IsCMnz-4Co7KiCNJGF7KLeU4WzE-LSqXv3mQ30CIQ7faXoMn53p83wZ1NoXYyhsNrQD4POUns_Isb_Pax5gvpZEdyo8zr1r7wb0dS7UXvJb0PWzLHc57Pg3u0kmcizQ", 
    "token_type" : "bearer", 
    "expires_in" : 1209599, 
    "userName" : "Alice", 
    ".issued" : "Wed, 30 Oct 2013 15:16:33 GMT", 
    ".expires" : "Wed, 13 Nov 2013 15:16:33 GMT" 
} 
+0

का अपना स्वयं का कार्यान्वयन प्रदान कर सकते हैं जोड़ कर की आवश्यकता होगी प्रयास करने के लिए में: करने के लिए "सामग्री प्रकार आवेदन/json" अनुरोध का शीर्षलेख? – rwisch45

+1

यही वह था जो मैंने पहले किया था। मैं फिर कोशिश करूंगा, शायद मैंने एक टाइपो बनाया। –

+1

इस पर 3 घंटे खो गए .. समस्या को प्रकट करने के लिए "unsupported_grant_type" googling मुझे आपकी पोस्ट में ले जाएं। –

उत्तर

15

OAuthAuthorizationServerHandler आप नहीं कर सकते का वर्तमान क्रियान्वयन के आधार पर।

private async Task InvokeTokenEndpointAsync() 
{ 
    DateTimeOffset currentUtc = Options.SystemClock.UtcNow; 
    // remove milliseconds in case they don't round-trip 
    currentUtc = currentUtc.Subtract(TimeSpan.FromMilliseconds(currentUtc.Millisecond)); 

    IFormCollection form = await Request.ReadFormAsync(); 
    var clientContext = new OAuthValidateClientAuthenticationContext(
       Context, 
       Options, 
       form); 

    await Options.Provider.ValidateClientAuthentication(clientContext); 

    if (!clientContext.IsValidated) 
    { 
      _logger.WriteError("clientID is not valid."); 
      if (!clientContext.HasError) 
      { 
       clientContext.SetError(Constants.Errors.InvalidClient); 
      } 
      await SendErrorAsJsonAsync(clientContext); 
      return; 
     } 

     var tokenEndpointRequest = new TokenEndpointRequest(form); 
} 

तो इस आप OAuthAuthorizationServerMiddleware का अपना स्वयं का कार्यान्वयन प्रदान करने के लिए overloads कि CreateHandler ताकि आप AuthenticationHandler<OAuthAuthorizationServerOptions>

+0

OAuthAuthorizationServerMiddleware के अपने कार्यान्वयन में वायर करने के तरीके के बारे में कोई और जानकारी? मुझे लगता है कि यह किसी भी तरह से 'app.UseOAuthBearer प्रमाणीकरण' के साथ है? – Alex

संबंधित मुद्दे