能否配置AWS Cognito联合登录时向外部IdP发送nonce参数?
AWS Cognito集成外部OIDC提供商时配置发送nonce参数的方法
问题背景
你正在使用AWS Cognito应用客户端集成外部OIDC提供商,对方授权端点要求必须携带nonce参数(必填项,用于验证id_token完整性、缓解重放攻击),但Cognito默认在OAuth授权流程中不会发送该参数,导致请求被拒绝。通过Postman模拟携带nonce的授权请求可正常获取有效响应。
解决方案
可以通过以下方式让Cognito转发nonce参数到外部OIDC提供商:
1. 在Hosted UI请求中手动附加nonce参数
当使用Cognito Hosted UI发起授权请求时,直接在请求URL中添加自定义生成的nonce参数,Cognito会自动将该参数转发给外部OIDC的授权端点。
示例请求URL:
https://your-cognito-domain.auth.region.amazoncognito.com/oauth2/authorize?response_type=code &scope=YOUR_SCOPES &client_id=YOUR_CLIENT_ID &state=STATE &redirect_uri=YOUR_REDIRECT_URI &nonce=YOUR_GENERATED_UNIQUE_VALUE &vtr=["Cl.Cm"] &ui_locales=en
注意事项:
- 需在前端代码中生成唯一且不可猜测的
nonce值(如使用UUID),并将其存储在会话(如localStorage或Cookie)中,后续用于验证外部OIDC返回的id_token中的nonce声明。 nonce值需包含会话状态,避免被攻击者猜测。
2. 验证id_token中的nonce声明
外部OIDC提供商返回id_token后,从会话中取出之前存储的nonce值,与id_token解码后的nonce字段进行比对,确认一致后再继续后续流程,完成防重放攻击的验证。
补充说明
OIDC规范中nonce参数主要用于implicit/hybrid flow场景,但部分外部提供商可能强制要求code flow也携带该参数。Cognito默认不会在code flow中自动生成nonce,因此需要手动添加并通过Hosted UI转发。
内容的提问来源于stack exchange,提问作者Colin Bowen
相关产品推荐
相关产品推荐

