如何在PWA中使用Face ID并与Azure AD B2C集成
基于Azure AD B2C的PWA生物特征(Face ID)登录集成方案分析
问题背景
我们已实现基于Azure的后端Web API,采用Azure AD B2C做用户身份验证。低代码平台构建的Web门户调用这些API时,用户需先重定向到Azure AD B2C,完成用户名/密码+MFA登录后获取1小时有效期的JWT令牌,过期需重新登录。
现计划将门户转为PWA,核心需求是通过Face ID(或对应OS的生物特征方案)简化登录:首次登录仍需用户名/密码+MFA,之后启用生物特征验证,后续登录无需再输入账号密码和MFA,直接用生物特征完成验证。
我们梳理集成逻辑时遇到以下疑问:
- 后端只认可Azure AD B2C颁发的令牌,PWA仍需向其请求令牌,那Face ID在流程中扮演什么角色?
- 是否需要在Azure AD B2C中创建单独的自定义策略来验证Face ID?
- 我们当前的实现思路是否合理?有没有关键遗漏环节?
当前思路参考了苹果Web Authentication相关内容:
- 用户首次登录启用Face ID时,将Web Authentication API返回的公钥凭据通过Graph API作为自定义属性存储到Azure AD B2C对应用户名下;
- 后续登录时,PWA检测到Face ID可用则提供该登录选项,本地验证通过后,重定向到Azure AD B2C的自定义策略,该策略调用后端通过Graph API查询匹配公钥凭据的用户,匹配成功则颁发令牌。
核心问题解答
Face ID的角色
Face ID是本地生物特征验证工具,仅负责在PWA端确认当前操作的是合法用户:它会解锁本地存储的WebAuthn私钥,完成签名操作,但不会直接参与Azure AD B2C的令牌颁发逻辑。Azure AD B2C最终验证的是签名后的公钥凭据,而非Face ID本身。
是否需要自定义策略?
是的,必须创建自定义策略。Azure AD B2C的内置策略不支持WebAuthn公钥凭据的验证逻辑,你需要通过自定义策略添加专属的验证步骤:接收PWA提交的公钥签名、校验签名有效性、匹配对应用户,最终颁发符合后端API要求的JWT令牌。
当前流程合理性评价
整体思路是可行的,完全贴合WebAuthn的标准流程:
- 首次登录绑定公钥凭据到用户账号,利用Graph API存储自定义属性的方式符合Azure AD B2C的扩展机制;
- 后续登录通过本地生物特征验证获取有效签名,再通过自定义策略完成身份校验并获取令牌,既满足了后端仅认可Azure AD B2C令牌的要求,又实现了免密登录的用户体验。
关键遗漏环节
公钥凭据的安全管理
- 存储在Azure AD B2C的公钥凭据(含公钥、用户句柄、设备信息等)需加密,防止数据泄露;
- 要支持多设备绑定:用户可能在多个设备启用生物特征,需允许同一用户关联多个公钥凭据,同时提供凭据解绑功能。
自定义策略中的签名校验逻辑
- 不能仅通过公钥匹配用户,必须验证PWA提交的签名有效性:用存储的公钥校验签名内容(比如唯一挑战字符串、时间戳),防止重放攻击;
- 需处理凭据失效场景:比如用户删除了设备上的生物特征凭证,策略要能识别并引导用户回到常规登录流程。
唯一挑战字符串机制
- 发起WebAuthn验证前,应从自定义策略获取唯一的挑战字符串,PWA将其传入Web Authentication API,签名后提交回策略校验,确保每次请求的唯一性,避免重放攻击。
跨平台兼容性处理
- 不能只适配Face ID,要兼容Windows Hello、Android指纹/面部识别等其他WebAuthn支持的生物特征方案,保证多平台用户体验一致;
- 需处理设备不支持WebAuthn的情况,自动 fallback到原有的用户名/密码+MFA流程。
令牌刷新优化
- 当前令牌有效期1小时,登录后需优化刷新逻辑:可在自定义策略中颁发刷新令牌,后续刷新令牌时无需再次验证生物特征;若刷新令牌过期,再触发生物特征验证,平衡安全性与用户体验。
内容的提问来源于stack exchange,提问作者DeMaki
相关产品推荐
相关产品推荐

