在 Asp.Net Identity 2 中构建自定义用户检查密码
Build a custom user check password in Asp.Net Identity 2
我需要在 asp.net MVC 5 中实现并使用 Asp.Net Identity 2 的应用程序中构建自定义用户密码检查。
我在 Whosebug post () 中读到我只需要覆盖 UserManager 中的 CheckPasswordAsync 方法。
我尝试在 IdentityConfig.cs 文件中覆盖此方法。这是我添加到 ApplicationUserManager class 的代码,只是为了测试这个解决方案:
public override async Task<bool> CheckPasswordAsync(ApplicationUser user, string password)
{
return await Task.Run(() => {
return true;
});
}
问题是登录过程中从来没有运行这个代码,登录总是失败。要登录用户,我使用 SignInManager.PasswordSignInAsync 登录用户,这是在 asp.net MVC 5 中创建新 Web 应用程序时的默认设置。此方法不应该调用 ApplicationUserManager。检查密码异步?或者这项工作需要其他配置?
应该可以。我刚刚使用了标准 ASP.NET MVC 模板,通过 NuGet 更新了所有涉及的库,它一定可以工作。
我想问题出在你覆盖方法的方式上。
在你的 ApplicationUserManager
中尝试像这样更改你的代码:
public override Task<bool> CheckPasswordAsync(ApplicationUser user, string password)
{
return Task.FromResult<bool>(true);
}
或:
public override Task<bool> CheckPasswordAsync(ApplicationUser user, string password)
{
return Task.Run(() => MyCheckPasswordAsync());
}
private bool MyCheckPasswordAsync()
{
return true;
}
你会看到它通过:
问题是我试图用系统中不存在的用户登录。
SignInManager.PasswordSignInAsync 从不调用 ApplicationUserManager。 CheckPasswordAsync 如果用户不存在于用户存储库中。
总之,我必须将用户存储在我的应用程序中或实施自定义用户存储机制。
这可能不是直接的答案,但它提供了问题的完整解决方案。他实现了一个自定义授权过滤器,然后您可以对其进行自定义以执行您想要的操作。
https://weblog.west-wind.com/posts/2013/Apr/18/A-WebAPI-Basic-Authentication-Authorization-Filter
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
public class BasicAuthenticationFilter : AuthorizationFilterAttribute
然后可以像这样使用而不是 [Authorize] 属性
[MyBasicAuthenticationFilter]
public class QueueController : ApiController
我需要在 asp.net MVC 5 中实现并使用 Asp.Net Identity 2 的应用程序中构建自定义用户密码检查。
我在 Whosebug post (
我尝试在 IdentityConfig.cs 文件中覆盖此方法。这是我添加到 ApplicationUserManager class 的代码,只是为了测试这个解决方案:
public override async Task<bool> CheckPasswordAsync(ApplicationUser user, string password)
{
return await Task.Run(() => {
return true;
});
}
问题是登录过程中从来没有运行这个代码,登录总是失败。要登录用户,我使用 SignInManager.PasswordSignInAsync 登录用户,这是在 asp.net MVC 5 中创建新 Web 应用程序时的默认设置。此方法不应该调用 ApplicationUserManager。检查密码异步?或者这项工作需要其他配置?
应该可以。我刚刚使用了标准 ASP.NET MVC 模板,通过 NuGet 更新了所有涉及的库,它一定可以工作。
我想问题出在你覆盖方法的方式上。
在你的 ApplicationUserManager
中尝试像这样更改你的代码:
public override Task<bool> CheckPasswordAsync(ApplicationUser user, string password)
{
return Task.FromResult<bool>(true);
}
或:
public override Task<bool> CheckPasswordAsync(ApplicationUser user, string password)
{
return Task.Run(() => MyCheckPasswordAsync());
}
private bool MyCheckPasswordAsync()
{
return true;
}
你会看到它通过:
问题是我试图用系统中不存在的用户登录。
SignInManager.PasswordSignInAsync 从不调用 ApplicationUserManager。 CheckPasswordAsync 如果用户不存在于用户存储库中。
总之,我必须将用户存储在我的应用程序中或实施自定义用户存储机制。
这可能不是直接的答案,但它提供了问题的完整解决方案。他实现了一个自定义授权过滤器,然后您可以对其进行自定义以执行您想要的操作。
https://weblog.west-wind.com/posts/2013/Apr/18/A-WebAPI-Basic-Authentication-Authorization-Filter
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
public class BasicAuthenticationFilter : AuthorizationFilterAttribute
然后可以像这样使用而不是 [Authorize] 属性
[MyBasicAuthenticationFilter]
public class QueueController : ApiController