看来你需要OWIN OAuth 2.0授权服务器。这是Microsoft扩展添加所需的功能。它会创建一个可以用来获取令牌的oauth端点(例如/令牌)。你没有直接的控制器,但有一个特殊的OWIN类连接到它,你需要扩展来添加你需要的任何东西。
你可以找到更多的细节here和here。
这是一个有点长的阅读,但它的作品,我用它在一些项目。
下面是一个简单的例子,你可以怎么做(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);
}
}
谢谢你的建议。这里提供了标准的ASP.NET身份链接。果然,我已经读了很多。但没有一个提到令牌入口点重载。因此我的问题。当然,OWIN OAuth 2.0授权服务器已经包含在Microsoft模板中。问题是,是否有可能以简单的方式重载它,以拦截令牌创建功能? –
这取决于你想要达到什么目的:向令牌添加一些额外的信息? (简单),添加你的身份验证? (简单),更改令牌格式? (不知道) –
我想到了一些最简单的事情,例如添加用户通过WEB API登录的日志记录,或者可能对用户进行一些额外的验证,例如,通过请求IP等等。如果可以用几行代码完成,那将会很好。如果我必须编写自己的授权服务器来实现这一点,那绝对不值得。 –