我目前可以使用以下方法創建 publicKeyCredentials:
navigator.credentials.create({
challenge: Uint8Array.from('CCCCCCCCCCCCCCCCCCCCCC', c => c.charCodeAt(0)),
rp: {
id,
name: 'rpName'
},
user: {
id: Uint8Array.from('userHandleId', c => c.charCodeAt(0)),
name: 'userName',
displayName: 'DisplayName'
},
pubKeyCredParams: [{alg: -7, type: 'public-key'}],
authenticatorSelection: {
userVerification: 'discouraged',
authenticatorAttachment: 'platform',
requireResidentKey: true, // don't seem to do anything with android-saftynet
residentKey: 'required' // don't seem to do anything with android-saftynet
},
timeout: 60000,
attestation: 'direct'
})
然后使用以下命令檢索憑證:
navigator.credentials.get({
publicKey: {
challenge: generateChallenge(),
allowCredentials: [{
id: decodeArray(id),
type: 'public-key'
}],
timeout: 60000,
transport: ['internal'],
userVerification: 'discouraged'
},
})
此流程適用于我所有的蘋果設備,但是,在 Android 上,憑據的“fmt”是“android-saftynet”,它似乎不支持 userHandles。
我可以在 Android 上強制使用任何可以保存 userHandles 的格式嗎?或者另一種使用 publicKeyCredential 存盤資訊以允許我支持無用戶名 webauthn 流的方式?
編輯:看起來 android-saftynet 不支持 userHandle。有誰知道是否有支持 userHandle 的 Android 身份驗證器流程?(除了 USB 身份驗證流程)
uj5u.com熱心網友回復:
證明(具有各種格式,例如android-safetynet)和無用戶名流是兩個完全獨立的概念。您可以在沒有證明(格式none)的情況下擁有無用戶名流。
Attestation 允許您驗證身份驗證器本身 - 身份驗證器是否實際上是 iPhone、Yubikey 或(非根)Android 設備,以及密鑰材料的存盤方式或指紋掃描儀的誤報率等屬性。有關更多詳細資訊,請參閱https://fidoalliance.org/fido-technotes-the-truth-about-attestation/和https://medium.com/webauthnworks/webauthn-fido2-demystifying-attestation-and-mds-efc3b3cb3651
在 WebAuthn 級別 1requireResidentKey: true中,即使用戶代理不支持無用戶名注冊(帶有 ),也允許繼續進行(參見authenticatorMakeCredential操作步驟 20)。在第 2 級中,發生了一些變化:
- 駐留密鑰現在稱為客戶端可發現憑據,
requireResidentKeyboolean 已更改為residentKey列舉,但仍支持向后兼容,- 如果不支持客戶端可發現憑據,則操作已更改為在步驟 4
authenticatorMakeCredential中回傳錯誤, credProps添加擴展以確定是否創建了客戶端可發現憑證,無論是在 RP 的請求下還是因為身份驗證者選擇創建(步驟 7.4)。
在撰寫本文時,使用 Chrome 97 的 Android 不支持無用戶名身份驗證(使用空allowCredentials陣列)。這一直是一個已知問題。
uj5u.com熱心網友回復:
此流程適用于我所有的蘋果設備,但是,在 Android 上,憑據的“fmt”是“android-saftynet”,它似乎不支持 userHandles。
澄清一下,證明宣告userHandle的格式與驗證者回傳from的能力無關navigator.credentials.get()。根據規范,它是否要回傳基本上取決于身份驗證userHandle器。
我可以在 Android 上強制使用任何可以保存 userHandles 的格式嗎?
WebAuthn 沒有為 RP(依賴方,即您的服務器)提供任何方式來要求特定的證明站格式,因此您要么必須全部支持它們(為此我強烈建議您使用現有的庫)或選擇并選擇并拒絕使用您不想支持的陳述句注冊憑據。
或者另一種使用 publicKeyCredential 存盤資訊以允許我支持無用戶名 webauthn 流的方式?
如果我錯了,我會糾正這個,但我認為你不需要userHandle完成無用戶名。您應該能夠獲取您從中獲取的憑證 ID,navigator.credentials.get()并將其首先與您的已注冊憑證串列相匹配,然后從您自己的內部記錄中提取相應的用戶 ID,其中哪些憑證屬于哪個用戶。
這么說來,Android 上的 FIDO2 支持有點參差不齊。最后,我檢查了平臺上基本上不支持可發現的憑據,這意味著 Android 設備上的無用戶名支持目前幾乎是不可能的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/416055.html
標籤:
上一篇:如何從堆疊中洗掉特定活動
