4

我正在開發ASP.NET Web API應用程序。我需要通過登錄名和密碼對用戶進行身份驗證,並返回響應字符串令牌。我需要有屬性[Authorize]工作。身份2.0 Web API爲客戶端生成令牌

我試圖調查,如何使用BearerToken機制來做,但沒有任何成功。請提供工作代碼示例。

+1

http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/ – ScottE 2014-09-23 00:14:45

回答

7

您需要配置您的授權服務器(您的情況下是您的授權服務器和資源服務器)以發佈訪問令牌並使用它們。 這可以使用Owin中間件通過定義和終點來完成,您應該使用grant_type = password將用戶憑證(資源所有者流)發送給它。因此,AS將驗證這些憑據併爲您提供與您配置的過期日期綁定的訪問令牌。

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    { 
     ConfigureOAuth(app); 
     //Rest of code is here; 
    } 

    public void ConfigureOAuth(IAppBuilder app) 
    { 
     OAuthAuthorizationServerOptions OAuthServerOptions = new OAuthAuthorizationServerOptions() 
     { 
      AllowInsecureHttp = true, 
      TokenEndpointPath = new PathString("/token"), 
      AccessTokenExpireTimeSpan = TimeSpan.FromDays(1), 
      Provider = new SimpleAuthorizationServerProvider() 
     }; 

     // Token Generation 
     app.UseOAuthAuthorizationServer(OAuthServerOptions); 
     // Token Consumption 
     app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 

    } 
} 

現在,您需要定義一個名爲SimpleAuthorizationServerProvider類和驗證的方法憑據GrantResourceOwnerCredentials如下面的代碼:其中你有良好的理解

public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider 
{ 
    public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context) 
    { 
     context.Validated(); 
    } 

    public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
    { 

     context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" }); 

     using (AuthRepository _repo = new AuthRepository()) 
     { 
      IdentityUser user = await _repo.FindUser(context.UserName, context.Password); 

      if (user == null) 
      { 
       context.SetError("invalid_grant", "The user name or password is incorrect."); 
       return; 
      } 
     } 

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

     context.Validated(identity); 

    } 
} 

我強烈建議你閱讀我的post here您正在安裝的組件以及此流程如何工作。

+0

謝謝。這爲我節省了很多時間。一些官方的在線文檔只是用一種方式使用實體框架工作ORM和代碼首先在預定義的表和列的某處創建數據庫;生產部署和數據庫管理/控制很困難。 – 2016-09-03 19:25:16

2

請按照this article的說明逐步說明哪些軟件包會添加到解決方案中,並在OWIN上提供假OAuth實現。

相關問題