![](/img/trans.png)
[英]ASP.NET Core API authentication using Firebase and Identity
[英]Migration of users from asp.net identity 2 to firebase authentication
我有一個 .net 應用程序,它使用 asp.net 身份 2 來驗證用戶身份。 用戶使用用戶名/密碼登錄,並在成功登錄后生成訪問令牌 (JWT) 和刷新令牌。
asp.net 2 的默認實現密碼散列可以在這里找到。 它使用帶有隨機鹽的密鑰派生 function來生成 hash。 鹽作為 kdf 的 output 的一部分包含在內。 因此,最終生成的密碼 hash 由第一個空字節組成,然后是 16 個字節的鹽,然后是 32 個字節的散列密碼。 從上面的參考資料中我們可以看到,使用的算法是 HMAC-SHA1,迭代次數為 1000 次,用戶的原始密碼作為 HMAC 的密鑰( 參見此處)。
我正在考慮遷移到Firebase 身份驗證,並且我想將現有用戶遷移到那里。 根據Firebase 文檔,在遷移 HMAC_SHA1 散列密碼時,我們必須包含密碼 hash、salt 和 hmac 密鑰。 此外,我們無法提供 sha1 散列算法使用的迭代次數( 參見此處)。
所以,問題是:我們如何知道 hmac 的密鑰,因為它是用戶的原始密碼? 這是 asp.net 身份 2 的默認實現。由於我們永遠無法知道,這意味着我們無法將用戶遷移到 firebase 身份驗證?
另外,即使我們知道密鑰,我們如何將 sha1 算法的 1000 次迭代在有效載荷中提供給 Firebase? 僅當散列算法為 sha1 且沒有 hmac 時才能執行此操作, 請參見此處。
我可以幫助解決問題的 firebase 部分。 SDK 似乎沒有提供 Firebase CLI 支持的所有功能。
如果你看看這里:
https://firebase.google.com/docs/cli/auth
firebase auth:import ACCOUNT_FILE \
--hash-algo=HASH_ALGORITHM \
--hash-key=KEY \
--salt-separator=SALT_SEPARATOR \
--rounds=ROUNDS \
--hash-input-order=HASH_INPUT_ORDER
我認為你可以定義你需要的一切。 對於hash-algo
,您需要使用HMAC_SHA1
對於hash-key
,您需要使用用於 hash 的密鑰 base64 格式的密碼 對於rounds
次,您指定的迭代使用 1000 對於hash-input-order
,您需要使用SALT_FIRST
現在你可以在哪里得到鑰匙,也許其他人可以插手。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.