AWS Cognito中MFA能否纳入访问令牌?及登录状态识别咨询
AWS Cognito中通过ID Token识别MFA登录状态的配置要点
针对你遇到的amr声明缺失问题,核心原因是这个声明只有在用户完成MFA验证后才会自动出现在ID Token中,同时需要满足几个配置和流程要求:
必须完成MFA验证流程
不管MFA是强制还是可选,只有当用户在登录时实际完成了MFA验证步骤(比如输入短信验证码或TOTP码),Cognito才会在ID Token中添加amr声明,其中包含mfa值。用StartWithSrpAuthAsync发起登录后,如果用户启用了MFA,Cognito会返回SMS_MFA或SOFTWARE_TOKEN_MFA类型的挑战,你需要调用RespondToAuthChallengeAsync完成验证,此时拿到的ID Token才会包含amr声明。如果用户没启用MFA,或者可选MFA时选择跳过,ID Token里不会有这个字段。检查应用客户端配置
- 确认应用客户端的OAuth范围包含
openid——amr是OpenID Connect的标准声明,必须包含openid范围才能在ID Token中返回。 - 不要在应用客户端的"ID Token自定义声明"或其他设置中限制默认声明的返回,默认情况下Cognito会自动包含
amr(当满足MFA条件时)。
- 确认应用客户端的OAuth范围包含
排查预令牌生成Lambda(如果已配置)
虽然官方文档说明amr声明无法自定义,但如果你的用户池配置了预令牌生成Lambda,要检查代码是否意外修改了response.claimsOverrideDetails,导致默认声明被移除。正常情况下Cognito会保留这个声明,无需额外处理。测试验证建议
测试时先确保目标用户已经在Cognito用户池中启用了MFA(比如短信或软件令牌),然后完整走一遍"SRP登录→MFA验证"的流程,拿到ID Token后用JWT解析工具解码,确认amr数组中是否包含mfa值。
内容的提问来源于stack exchange,提问作者Mikael Gidmark
相关产品推荐
相关产品推荐

