使用resident keys时,依赖方(Relying Party)如何识别登录用户?
WebAuthN 常驻密钥场景下的用户识别逻辑
首先直接回答你的疑问:仅拿返回的user.id直接做用户识别是不行的,必须配套完整的校验流程,完整的识别逻辑如下:
- 当你使用客户端可发现的常驻密钥(Resident Key)做无用户名登录时,用户完成生物验证等操作后,认证器返回的
AuthenticatorAssertionResponse结构中会携带userHandle字段,这个字段的值就是你在凭证注册阶段传入的user.id。 - 拿到返回结果后,你需要先完成几项必做的安全校验,再做用户身份匹配:
- 首先校验断言签名合法性:用该凭证注册时你存在服务端的公钥,验证
AuthenticatorAssertionResponse里的签名是否有效,避免请求被伪造 - 校验返回的
rpId是否和你依赖方的合法ID完全匹配,防止跨站点的凭证冒用 - 校验当前返回的凭证ID(
credential.id)是否确实绑定在userHandle对应的用户名下,避免凭证被篡改冒用
- 首先校验断言签名合法性:用该凭证注册时你存在服务端的公钥,验证
- 所有校验都通过之后,你才可以确认
userHandle对应的用户就是本次完成登录的用户。
注意:如果跳过签名校验直接用
userHandle匹配用户,攻击者可以伪造携带任意userHandle的请求,直接登录你平台上的任意用户,会有极严重的安全风险。
内容的提问来源于stack exchange,提问作者adoyon23
相关产品推荐
相关产品推荐

