我想知道在MVC 5和ASP.NET Identity Framework附带的UserManager中默认实现的Password Hasher是否足够安全?如果是这样,如果你可以向我解释它是如何工作的?
IPasswordHasher界面如下所示:
public interface IPasswordHasher
{
string HashPassword(string password);
PasswordVerificationResult VerifyHashedPassword(string hashedPassword,
string providedPassword);
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它不需要盐,但在这个帖子中提到:" Asp.net身份密码哈希 ",它确实在幕后加盐.所以我想知道它是如何做到的?这盐来自何处?
我担心的是盐是静态的,使它非常不安全.
我确信这个问题的答案一定是显而易见的,因为这是一件显而易见的事情,但我似乎找不到任何指导。
我有一个 ASP.NET Core 最小 API,并且想要添加身份验证。我已经在不同的项目中设置了 Identity,并且希望对 API 使用相同的数据库(即相同的用户)。
我看到这篇博客文章,它看起来很有希望,直到我意识到那里的代码以纯文本形式检查用户名和密码(admin在示例中都使用)...
if (credentials[0] == "admin" && credentials[1] == "admin")
Run Code Online (Sandbox Code Playgroud)
问题在于(值得庆幸的是),身份不会以纯文本形式存储密码,它们是经过哈希处理的,所以我无法进行简单的比较。
我尝试对传入的密码进行哈希处理,如本答案所示,但这不起作用,因为每次调用时哈希值都不同_userManager.PasswordHasher.HashPassword。
我尝试使用 ASP.NET Core 的SignInManager.CanSignInAsync方法来检查是否可以使用凭据登录,但这需要我将以下内容添加到Program...
builder.Services.AddIdentity<User, IdentityRole>(options => {
// options removed for clarity
})
.AddDefaultTokenProviders()
.AddEntityFrameworkStores<AppDbContext>();
Run Code Online (Sandbox Code Playgroud)
然而,一旦我这样做了,对 API 的任何请求都会尝试重定向到登录页面,这显然在从代码调用 API 时不起作用。
我在 Microsoft 网站上只能找到这篇文章,但这假设您使用的是 Azure。目前,我仍在本地计算机上开发它,我还不知道项目所有者是否想要部署到 Azure 还是他们自己的托管服务器,因此那里的代码对我没有帮助。
任何人都能够向我解释我如何完成看似如此明显且简单的任务?如果我需要提供更多信息,请告诉我。谢谢
c# authentication asp.net-identity asp.net-core minimal-apis