2016-11-06 128 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等等。如果可以用几行代码完成,那将会很好。如果我必须编写自己的授权服务器来实现这一点,那绝对不值得。 –