【发布时间】:2021-03-15 09:01:08
【问题描述】:
我有一个 .net 应用程序,它使用 asp.net 身份 2 来验证用户身份。用户使用用户名/密码登录,成功登录后会生成访问令牌 (JWT) 和刷新令牌。
用于散列密码的 asp.net 2 的默认实现可以在 here 找到。 它使用带有随机盐的key derivation function 来生成哈希。盐包含在 kdf 的输出中。因此,最终生成的密码哈希由第一个空字节组成,然后是 16 字节的盐,然后是 32 字节的哈希密码。从以上参考我们可以看出,使用的算法是 HMAC-SHA1 迭代 1000 次和用户的原始密码 作为 HMAC 的密钥 (see here)。
我正在考虑迁移到Firebase Authentication,并且我想将我现有的用户迁移到那里。基于Firebase documentation,在迁移 HMAC_SHA1 散列密码时,我们必须包括密码散列、盐和 hmac 密钥。此外,我们无法提供 sha1 哈希算法 (see here) 使用的迭代次数。
所以,问题是:我们如何知道 hmac 的密钥,因为它是用户的原始密码?这是 asp.net 身份 2 的默认实现。由于我们永远无法知道它,这意味着我们无法将用户迁移到 firebase 身份验证?
另外,即使我们知道密钥,我们如何将 sha1 算法的 1000 次迭代在有效载荷中提供给 Firebase?只有当哈希算法是 sha1 没有 hmac see here 时才能做到这一点。
【问题讨论】:
标签: firebase-authentication asp.net-identity-2