You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否配置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:35:19