调用navigator.credentials.create
生成新凭据时,需要在PublicKeyCredentialCreationOptions
中包含一个id为的[PublicKeyCredentialUserEntity][1]
。规范中说这个id必须用于身份验证和授权决策,但当您调用navigator.credentials.get
时,不会在PublicKeyCredentialRequestOptions
中传递这个值。您只需要允许签署挑战的凭据的凭据ID。
如果我在后端已经有一个唯一的客户标识符来关联每个生成的凭据,并且可以使用它来获取正确的凭据ID,那么我对PublicKeyCredentialUserEntity的userId使用什么值真的重要吗?
如果我在后端已经有一个唯一的客户标识符来关联每个生成的凭据,并且可以使用它来获取正确的凭据ID,那么我对PublicKeyCredentialUserEntity的userId使用什么值真的重要吗?
对于2FA和Passwordless,您可能不需要太担心。正如您所说,您的数据库中已经通过凭据ID与用户记录建立了关系,用户必须通过用户名/电子邮件等进行身份识别。。。以完成2FA或无密码身份验证。
当您在注册过程中需要可发现的凭据时,user.id
(也称为userHandle
(变得最重要。这些类型的凭证在内部存储在具有(rpID, userHandle)
密钥的映射中的验证器中。您必须小心这些,因为如果您允许用户再次注册相同的验证器并为user.id
指定相同的值,验证器将覆盖现有的可发现凭据。
另一方面,可发现凭证允许";usernameless";身份验证。你从navigator.credentials.get()
得到的userHandle
的值将是你作为RP如何知道用户的ID是什么,而不是他们事先通过用户名/电子邮件等告诉你。。。因为它将与您传递给CCD_ 13的CCD_。