AWS ALB与Cognito认证成功后未获取授权码的问题咨询
问题描述
- 使用AWS ALB处理应用的入站流量
- 在ALB层级配置Cognito处理登录认证,集成Okta联合登录
- 设置响应类型为
code - 可正常登录并跳转至应用
跳转后的URL中没有?code查询参数,无法获取授权码来换取令牌,进而无法在.NET应用中通过解码访问令牌获取声明值完成用户认证。
排查与解决步骤
检查ALB认证规则的参数传递设置
ALB默认完成Cognito认证后会直接转发用户会话到后端,不会主动传递code参数。需确认ALB的认证动作是否开启了传递授权码的配置,可尝试将授权码通过自定义请求头或查询参数的方式转发给后端应用。核对Cognito用户池应用客户端配置
- 确认应用客户端已启用
Authorization Code Grant授权类型,且响应类型code在允许范围内。 - 验证回调URL与ALB配置的回调地址完全一致(含协议、域名、路径),地址不匹配会导致Cognito不返回授权码。
- 调整ALB与Cognito的集成模式
如果ALB采用的是认证后直接转发会话的模式,ALB会自行完成令牌换取,不会将code暴露给后端:
- 可改为让ALB传递ID Token或Access Token到后端(通过请求头
X-Amzn-Oidc-Data或X-Amzn-Oidc-Access-Token),直接在.NET应用中解析这些令牌提取声明信息,无需手动用code换取。 - 若必须获取
code,则需修改架构:让.NET应用直接对接Cognito发起授权请求,ALB仅做流量转发,不处理认证逻辑。
- 验证Okta身份提供商配置
确保Okta作为Cognito的联合身份提供商,已正确配置授权码流程,允许将code返回给Cognito,确保链路传递正常。
内容的提问来源于stack exchange,提问作者Ebikeneser
相关产品推荐
相关产品推荐

