2014-04-29 19 views
13
public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider 
{ 
    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
    { 
     bool isvalidUser = AuthenticateUser(context.UserName, context.Password);// validate my user&password 
     if (!isvalidUser) 
     { 
      context.Rejected(); 
      return; 
     } 
     // create identity 
     var id = new ClaimsIdentity(context.Options.AuthenticationType); 
     id.AddClaim(new Claim("sub", context.UserName)); 
     id.AddClaim(new Claim("role", "user")); 

     // create metadata to pass on to refresh token provider 
     var props = new AuthenticationProperties(new Dictionary<string, string> 
      { 
       { "as:client_id", context.ClientId } 
      }); 

     var ticket = new AuthenticationTicket(id, props); 
     context.Validated(ticket); 
    } 
} 

लॉग इन समय मैं इस SimpleAuthorizationServerProvider (वेब ​​एपीआई में) का उपयोग कर रहा मैं मिलता है और ग्राहक के लिए पहुँच टोकन भेज सकते हैं सर्वर साइड में अपने कस्टम OAuth2 पहुँच टोकन मान्य कर सकते हैं। फिर लॉग इन उपयोगकर्ता मैं सर्वर साइड में अपने कस्टम OAuth2 पहुँच टोकन मान्य कैसे (वेब ​​एपीआई में) कर सकते हैंमैं कैसे

क्लाइंट की ओर से मैं हूँ, अन्य पृष्ठों का उपयोग करने की जरूरत है इस

private static TokenResponse GetToken() 
{ 
    var client = new OAuth2Client(new Uri("http://localhost:1142/token"), "client1", "secret"); 
    var response = client.RequestResourceOwnerPasswordAsync(uid, pwd).Result; 
    Console.WriteLine(response.AccessToken); 
    return response; 
} 

और कॉल की तरह पीढ़ी टोकन प्रमाणीकरण के बाद विशेष वेब एपीआई

private static void CallProfile(string token) 
{ 
    var client = new HttpClient(); 
    client.SetBearerToken(token); 
    var response = client.GetStringAsync(new Uri("http://localhost:1142/api/Profile?id=1")).Result; 
} 
+1

बस यहाँ मेरी टोपी से बाहर है, लेकिन अगर वाहक टोकन प्राधिकरण शीर्षक में वापस तो एक साधारण कॉल पारित हो जाता है बात कर उपयोगकर्ता के लिए। आईडी। प्रमाणीकृत आपको बताएगा कि टोकन मान्य है या नहीं। – Mark

+1

@ मार्क - हालांकि, यह तब हो सकता है जब विधि अजाक्स अनुरोध के माध्यम से बुलाया जाता है और कोई उपयोगकर्ता नहीं है। अनुरोध से जुड़ी संस्था? – Catchops

+0

@Catchops आप अनुरोध में अपना टोकन पास करना होगा प्राधिकरण शीर्षलेख (उदा। प्राधिकरण: Bearer YOUR_TOKEN) जब आप AJAX अनुरोध करते हैं। – Mark

उत्तर

2

दरअसल, ओविन आपके लिए लगभग सबकुछ संभालती है। यदि आप अनुरोध प्राप्त करने के लिए ASP.NET API v2 सर्वर का उपयोग करते हैं। आपको बस अपने http अनुरोधों में सही टोकन में अपना टोकन पास करना होगा।

1. संदेश http अनुरोध

आपके टोकन पारित करने के लिए 2 तरीके हैं:

2. में अपने टोकन जोड़ें प्रमाणित करें आपके अनुरोध

आप अगर requested token मान्य है की जाँच करने के (ClaimsPrincipal)Thread.CurrentPrincipal.Identity.IsAuthenticated उपयोग कर सकते हैं

3. आपके अनुरोध अधिकृत करें

आप [Authorize] विशेषता का उपयोग कर सकते हैं या आप अपना खुद का AuthorizeAttribute

यदि आप अपनी खुद की विशेषता लागू करते हैं, तो आप अधिक दिलचस्प चीजें कर सकते हैं: जटिल प्राधिकरण करने के लिए डेटाबेस से कनेक्ट करें।

मुझे लगता है, यह ASP.NET वेब एपीआई में OAUTH2 साथ शुरू करने के लिए एक अच्छा दस्तावेज है: http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/

+0

हाय, अगर हम एक कुकी में टोकन भेजते हैं, तो हम प्राधिकरण शीर्षलेख कैसे सेट करते हैं? क्या हम इसे 'AuthorizeAttribute' में करते हैं या फिर भी बाद में ऐसा करते हैं? – DevEng