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

已通过AWS Cognito认证后,如何在Web应用中获取AccessToken?

AWS Cognito认证后获取用户信息的解决方案

核心结论

你看到的AWSELBAuthSessionCookie-0和AWSELBAuthSessionCookie-1是ALB(应用负载均衡器)的会话Cookie,仅用于维持ALB的认证状态,不能直接用来调用Cognito API,得通过以下方式获取用户信息或Cognito令牌:

具体实现路径

1. 直接从ALB注入的请求头提取用户信息(最简单)

用户通过ALB认证后,ALB会向后端注入x-amzn-oidc-data请求头,这个头里是Base64编码的用户身份数据,解码后就能直接拿到邮箱、用户名等信息,无需调用Cognito API。示例解码代码:

// 后端拿到x-amzn-oidc-data头后解码
const encodedData = req.headers['x-amzn-oidc-data'];
const decodedData = JSON.parse(Buffer.from(encodedData, 'base64').toString());
const userEmail = decodedData.email;

2. 获取Cognito AccessToken

如果必须用AccessToken调用Cognito API,有两种方式:

  • 后端直接取:ALB会注入x-amzn-oidc-accesstoken请求头,这个就是Cognito的AccessToken,后端可以直接读取后传给前端,或者自己调用API。
  • 前端从URL/ Cookie取:如果你的ALB认证配置里开启了“传递令牌到前端”,用户重定向回应用时,URL参数或专属Cookie(不是那两个ALB会话Cookie)里会包含access_token和id_token,直接提取即可。

3. 用AccessToken调用Cognito GetUser API

拿到AccessToken后,调用Cognito的GetUser接口获取完整用户属性:

fetch('https://cognito-idp.<你的区域>.amazonaws.com/', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-amz-json-1.1',
    'X-Amz-Target': 'AWSCognitoIdentityProviderService.GetUser'
  },
  body: JSON.stringify({
    AccessToken: '你的AccessToken'
  })
})
.then(res => res.json())
.then(data => {
  // 从UserAttributes数组中提取邮箱
  const emailAttr = data.UserAttributes.find(attr => attr.Name === 'email');
  if (emailAttr) {
    console.log('用户邮箱:', emailAttr.Value);
    // 用这个邮箱做个性化处理
  }
});

内容的提问来源于stack exchange,提问作者NSA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:47:23