2016-11-06 97 views
0

Visual Studio爲ASP.NET WEB API項目提供了一個很好的就緒模板。我們有一套處理ASP.NET身份的帳戶管理功能。但是,一個最基本的功能是缺少自動生成的控制器和文檔。即,用於授予WEB API訪問令牌的「〜/令牌」URL在任何地方都沒有提及。重載WEB API令牌控制器

我想寫一個自定義控制器來攔截所有的「〜/ Token」調用來進行一些類似於其他WEB API控制器的日誌記錄和附加處理。我怎樣才能以簡單自然的方式做到這一點?

回答

1

看來你需要OWIN OAuth 2.0授權服務器。這是Microsoft擴展添加所需的功能。它會創建一個可以用來獲取令牌的oauth端點(例如/令牌)。你沒有直接的控制器,但有一個特殊的OWIN類連接到它,你需要擴展來添加你需要的任何東西。

你可以找到更多的細節herehere

這是一個有點長的閱讀,但它的作品,我用它在一些項目。

下面是一個簡單的例子,你可以怎麼做(GrantResourceOwnerCredentials是你最重要的方法):

public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider 
    { 

     public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context) 
     { 
      // Add CORS e.g.  
      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); 

     } 
    } 
+0

謝謝你的建議。這裏提供了標準的ASP.NET身份鏈接。果然,我已經讀了很多。但沒有一個提到令牌入口點重載。因此我的問題。當然,OWIN OAuth 2.0授權服務器已經包含在Microsoft模板中。問題是,是否有可能以簡單的方式重載它,以攔截令牌創建功能? –

+0

這取決於你想要達到什麼目的:向令牌添加一些額外的信息? (簡單),添加你的身份驗證? (簡單),更改令牌格式? (不知道) –

+0

我想到了一些最簡單的事情,例如添加用戶通過WEB API登錄的日誌記錄,或者可能對用戶進行一些額外的驗證,例如,通過請求IP等等。如果可以用幾行代碼完成,那將會很好。如果我必須編寫自己的授權服務器來實現這一點,那絕對不值得。 –