Web API 2和ASP标识 - 锁定用户的处理

时间:2014-06-13 19:36:48

标签: asp.net-identity asp.net-web-api2

我刚刚将我的网络应用程序(ASP.NET MVC)迁移到ASP Identity。

除了网络应用提供的API之外,在完成一些工作之后一切正常。这是一个WEB API 2,它使用承载令牌机制来验证用户。身份验证本身也可以。但是:当用户被锁定时,用户的令牌仍然通过API令牌端点发出。

有没有建议的方法来处理这个问题?我没有找到任何例子......

谢谢!

2 个答案:

答案 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);
        }