如何在 ASP.NET 5 Identity 中设置 PasswordHasherCompatibilityMode.IdentityV3?

Posted

技术标签:

【中文标题】如何在 ASP.NET 5 Identity 中设置 PasswordHasherCompatibilityMode.IdentityV3?【英文标题】:How to set PasswordHasherCompatibilityMode.IdentityV3 in ASP.NET 5 Identity? 【发布时间】:2016-07-23 12:53:08 【问题描述】:

目前似乎默认设置为PasswordHasherCompatibilityMode.IdentityV2,这是 ASP.NET 5 中的 HMAC-SHA1。我尝试创建PasswordHasherOptions 的实例以添加到服务 (DI),但无法使其工作。

V3 使用 PBKDF2 和 HMAC-SHA256、128 位盐、256 位子密钥、10000 次迭代。

我希望这会像将来的一些配置设置一样简单,而不是必须实现自定义实现,因为所有代码都已经存在。

更新:

services.Configure<PasswordHasherOptions>(options => options.CompatibilityMode = PasswordHasherCompatibilityMode.IdentityV3);

【问题讨论】:

您是如何尝试注册PasswordHasherOptions 的。介意发布您的 ConfigureConfigureServices 方法吗? 【参考方案1】:

默认不应该是V2,默认是较新的格式,见https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNetCore.Identity/PasswordHasherOptions.cs

    /// <remarks>
    /// The default compatibility mode is 'ASP.NET Identity version 3'.
    /// </remarks>
    public PasswordHasherCompatibilityMode CompatibilityMode  get; set;  = 
           PasswordHasherCompatibilityMode.IdentityV3;

如果散列密码的第一个字节是 0x01,那么它是版本 3 散列。

如果您看到 0x00,则说明它是在您的代码中的其他位置配置的,或者存在错误,在这种情况下,请将其记录在 GitHub 上。

【讨论】:

谢谢,好像是这样。我会检查并回来。 对不起,我还不知道如何确认它是否实际上是 V3,我试图在 Startup.ConfigureServices 中将模式设置为 PasswordHasherCompatibilityMode.IdentityV2 但它仍在生成相同长度的哈希,有什么指点吗? 除非你能告诉我你使用的是哪个版本的身份,否则我在这里能做的并不多。每个存储密码的第一个字节是什么? 附加问题 - 您期望的尺寸是多少? v3 的格式是 Format: 0x01, prf (UInt32), iter count (UInt32), salt length (UInt32), salt, subkey 。每个 UInt32 为 4 个字节。那么存储密码中的实际盐长度是多少?

以上是关于如何在 ASP.NET 5 Identity 中设置 PasswordHasherCompatibilityMode.IdentityV3?的主要内容,如果未能解决你的问题,请参考以下文章

如何按照存储库模式在 Asp.Net Core 5.0 项目上实现 .Net Core Identity?

如何在生产环境中设置 ASP.NET 5 环境变量

在 ASP.NET Core Identity 中使用 Authorize 属性检查多个策略之一

Controller.User 在 ASP.NET MVC 5 上由 ASP.NET Identity 设置不一致

ASP.NET CORE 5.0 Identity 显示当前登录用户

在 Asp.net Identity MVC 5 中创建角色