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

如何在AWS ALB HTTPS端点使用Cognito Client Credentials流程的access_token

问题背景

你需要向集成了Cognito的AWS ALB发送HTTPS请求,使用的是Cognito用户池中走Client Credential OAuth流程的应用客户端,已可通过如下请求获取令牌:

curl -X POST \
  https://mydomain.auth.eu-west-1.amazoncognito.com/oauth2/token  \
  -H 'authorization: Basic <mybase64encodedstring>' \
  -H 'content-type: application/x-www-form-urlencoded' \
  -d 'grant_type=client_credentials&scope=myscope'

请求成功后得到的响应如下:

{"access_token":"<a base64 encoded JWT token>","expires_in":3600,"token_type":"Bearer"}

核心需求是向ALB后端的应用发送HTTPS请求,实现无效令牌请求被拦截、有效令牌请求透传到后端的效果。虽然ALB默认的交互式Cognito集成不支持Client Credentials流程,但完全可以通过其他配置实现需求。

可行实现方案

方案一:使用ALB原生JWT验证功能(推荐)

这是成本最低、无需额外开发代码的方案,具体配置步骤如下:

  • 进入ALB对应的HTTPS监听器配置页,新增转发规则,优先级设置高于默认规则
  • 规则动作选择「验证JWT」,验证提供方选Cognito,按提示填写你的Cognito用户池ID、应用客户端ID、令牌签发方地址(格式为https://cognito-idp.<区域>.amazonaws.com/<你的用户池ID>)
  • 配置令牌提取规则:指定从Authorization请求头提取令牌,匹配前缀为Bearer
  • 配置鉴权结果动作:验证通过的请求转发到后端应用目标组,验证不通过的请求直接返回401/403状态码

配置完成后ALB会自动完成JWT的签名校验、过期时间校验、权限scope校验,完全满足需求。

方案二:使用Lambda@Edge实现自定义鉴权

如果你的ALB版本不支持原生JWT验证,可以选择该方案:

  • 编写Lambda函数,绑定到ALB的Viewer Request触发阶段
  • 函数逻辑为:提取请求头中Authorization字段的JWT令牌,调用Cognito用户池的JWKS公钥接口完成验签,同时校验令牌有效期、scope等信息
  • 校验通过的请求放行透传到后端,校验失败直接返回401响应

注意:不要使用ALB默认的「Cognito用户池集成」功能,该功能面向终端用户交互式登录场景设计,走Authorization Code授权码流,会自动跳转到Cognito登录页,不适用于Client Credentials这种机器对机器的非交互授权场景。

测试方法

拿到有效access_token后,使用如下请求测试即可:

curl https://<你的ALB域名>/<后端路径> \
  -H "Authorization: Bearer <你获取到的access_token>"

令牌有效时可正常拿到后端返回结果,令牌无效、过期、权限不足时会被ALB直接拦截返回错误。

内容的提问来源于stack exchange,提问作者Rob O'Doherty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 23:18:00