如何获取参数将MongoDB中ASP.net Identity用户迁移至Firebase认证
从AspNetCore.Identity.MongoDbCore迁移用户到Firebase认证的步骤
一、提取每个用户的Salt和密码哈希
AspNetCore.Identity.MongoDbCore v1.0.8复用ASP.NET Core Identity的默认密码存储格式,需从MongoDB用户文档的PasswordHash字段中解析所需值:
- 解析操作:
- 将
PasswordHash的Base64字符串解码为字节数组 - 跳过前4字节(格式标识位),接下来4字节为迭代次数(应与你指定的
rounds=10000一致) - 取后续16字节作为salt,转换为Base64字符串,即为导入JSON中需填写的
salt值 - 剩余字节为密码哈希值,转成Base64字符串,作为
passwordHash值
- 将
二、获取Hash Key
hash-key对应ASP.NET Identity项目生成HMAC_SHA256哈希时使用的密钥:
- 若项目中显式配置了密码哈希密钥,直接取用该值
- 若使用默认DataProtection配置,需从应用的DataProtection密钥环中提取对应HMAC密钥,可通过本地运行项目导出密钥或检查配置文件获取
- 注意:如果原密码哈希用的是ASP.NET Identity默认的PBKDF2_SHA256算法,无需指定
hash-key,需将Firebase导入的hash-algo改为PBKDF2_SHA256
三、生成Firebase导入用JSON文件
按Firebase要求格式创建用户列表JSON,单用户条目示例:
{ "email": "user@domain.com", "passwordHash": "解析得到的密码哈希Base64字符串", "salt": "解析得到的salt Base64字符串", "emailVerified": true }
四、执行Firebase CLI导入命令
确认参数匹配后,运行以下命令(替换文件路径和密钥值):
firebase auth:import ./users.json \ --hash-algo=HMAC_SHA256 \ --hash-key=你的哈希密钥字符串 \ --salt-separator="" \ --rounds=10000 \ --hash-input-order=SALT_FIRST
salt-separator设为空字符串,因hash-input-order=SALT_FIRST表示直接拼接salt与明文密码,无额外分隔符
五、导入后验证
导入完成后用原用户密码尝试登录,若失败优先排查:
- Salt和密码哈希的解析是否正确(可重新生成哈希对比验证)
- Hash Key是否与原项目一致
- 导入参数是否完全匹配(迭代次数、哈希算法、输入顺序)
内容的提问来源于stack exchange,提问作者acir23
相关产品推荐
相关产品推荐

