我刚刚将我的网络应用程序(ASP.NET MVC)迁移到ASP Identity。
除了网络应用提供的API之外,在完成一些工作之后一切正常。这是一个WEB API 2,它使用承载令牌机制来验证用户。身份验证本身也可以。但是:当用户被锁定时,用户的令牌仍然通过API令牌端点发出。
有没有建议的方法来处理这个问题?我没有找到任何例子......
谢谢!
答案 0 :(得分:5)
好的,那是一个愚蠢的......我现在看得更清楚了:)
我一直在眼前看到它:Web-Api2-Template包含一个类" ApplicationOAuthProvider"。这个允许几个地方拦截管道......我选择了方法" GrantResourceOwnerCredentials"已经被覆盖,并且我在密码检查后直接检查用户是否被锁定。
抱歉,希望对某人有帮助。
答案 1 :(得分:0)
转到ApplicationOAuthProvider类,并在ApplicationUser.LockoutEndDateUtc
方法中检查GrantResourceOwnerCredentials
:
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();
ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);
if (user == null)
{
context.SetError("invalid_grant", "The user name or password is incorrect.");
return;
}
if (user.LockoutEndDateUtc != null && user.LockoutEndDateUtc > DateTime.Now)
{
context.SetError("User Locked", "User is Locked,please contact to system administrator");
return;
}
ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager);
ClaimsIdentity cookiesIdentity = await user.GenerateUserIdentityAsync(userManager);
AuthenticationProperties properties = CreateProperties(user.UserName);
AuthenticationTicket ticket = new AuthenticationTicket(oAuthIdentity, properties);
context.Validated(ticket);
context.Request.Context.Authentication.SignIn(cookiesIdentity);
}