从YubiKey获取无密码登录凭据提示未注册问题如何解决
问题原因
- 核心原因是你注册YubiKey时未开启*可发现凭据(又称驻留凭据/Resident Key)*配置:无密码无需预先输入用户名的场景,依赖将凭据信息存储在YubiKey本地的驻留凭据模式,默认注册生成的是非驻留凭据,这类凭据不会保存在安全密钥本地,只能通过
allowCredentials传入的凭证ID唤醒,因此不传该参数时YubiKey无法识别到对应站点的注册信息。 - 次要排查点:注册与认证阶段的
rpId参数不一致、注册时的用户验证规则与认证阶段不匹配也会触发该报错。
解决方案
- 调整django-fido的全局配置,开启驻留凭据要求,在Django项目的
settings.py中添加如下配置:
FIDO2_AUTHENTICATOR_SELECTION = { # 要求认证器必须存储驻留凭据 "residentKey": "required", # 可根据业务需要调整为required/ discouraged,需保证注册与认证阶段配置一致 "userVerification": "preferred" }
- 删除之前注册的旧凭据,使用新配置重新完成YubiKey注册,旧的非驻留凭据无法兼容无密码登录模式。
- 重新发起无密码认证请求,仅传入
challenge和rpId即可正常唤醒YubiKey中的驻留凭据。
补充:不同型号的YubiKey支持的驻留凭据数量有限(YubiKey 5系列通常支持25个以内),如果注册失败可检查是否已达到存储上限。
内容的提问来源于stack exchange,提问作者James Lin
相关产品推荐
相关产品推荐

