是否应将Refresh Tokens与FIDO2认证结合使用?
原生应用中Refresh Token与FIDO2认证结合的合理性探讨
针对原生应用的OpenID Connect认证流程,可选择性返回能安全存储在设备上的长效Refresh Token。用户后续只需用密码或生物特征解锁存储的Refresh Token,就能通过令牌交换完成身份验证——本质上,Refresh Token让用户不用再输入用户名+密码/OTP,仅靠密码或生物特征就能完成验证,以此提升用户体验(CX)。
而在FIDO2认证中,用户是通过平台认证器完成验证的,比如Touch ID、Face ID或Windows Hello,具体取决于设备和平台。
从用户体验角度看,用平台认证器验证和用密码/生物特征解锁Refresh Token的作用类似。那么,将Refresh Token与FIDO2认证结合使用是否合理?
支持理由
- Access Token通常有效期较短(比如15分钟),如果用户会话时长超过这个期限,应用可以用已解锁的Refresh Token交换获取新令牌。当然也有无需Refresh Token的替代方案,比如采用PKCE流程的静默认证,或是在认证请求中使用
prompt=none参数。 - 相比FIDO2认证,用密码或生物特征解锁Refresh Token的用户体验略好:用户不需要离开原生应用,而遵循原生应用认证最佳实践(BCP)的FIDO2认证,仍需要打开外部浏览器(或应用内浏览器标签页)访问授权服务器。
- 部分用户可能更倾向使用外部认证器,而且不是所有用户的设备都内置平台认证器——我们不该对用户的使用场景做任何预设。
反对理由
- 不用处理Refresh Token可以减少部分安全风险。
- 能实现更一致的身份验证用户体验(UX)。
- 可以让原生应用和Web应用的身份验证体验保持一致(Web应用通常不使用Refresh Token)。
- 配置Refresh Token需要额外的工作量,比每次直接访问授权服务器更繁琐。
我认为将Refresh Token与FIDO2认证结合使用仍具备合理性,欢迎大家分享各自的见解。
内容的提问来源于stack exchange,提问作者Ryan.Bartsch
相关产品推荐
相关产品推荐

