Visual Studio为ASP.NET WEB API项目提供了一个很好的准备模板。我们有一组处理ASP.NET身份的帐户管理功能。但是,自动生成的控制器和文档都缺少一个最基本的功能。即,"〜/ Token"在任何地方都没有提到用于授予WEB API访问令牌的URL。
我想编写一个自定义控制器来拦截所有"〜/ Token"调用以类似于其他WEB API控制器的方式进行一些日志记录和其他处理。我怎样才能以简单自然的方式做到这一点?
答案 0 :(得分:1)
您似乎需要OWIN OAuth 2.0授权服务器。这是添加所需功能的Microsoft扩展。它创建了一个oauth端点(例如/ token),您可以使用它来获取令牌。你没有直接拥有控制器,但是有一个特殊的OWIN类连接到你需要扩展以添加你需要的任何东西。
阅读时间有点长,但它有效,我在一些项目中使用过它。
以下是一个简单的示例,您可以这样做(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);
}
}