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

如何从AWS Cognito获取已连接OIDC提供商的access_token/refresh_token

获取AWS Cognito第三方OIDC提供商的Access Token/Refresh Token

要拿到Facebook这类OIDC提供商返回的token,核心是让Cognito保存并暴露这些token,下面是具体操作步骤:

一、先配置Cognito用户池,让它保存第三方Token

  1. 登录AWS控制台,打开你的Cognito用户池
  2. 进入「身份提供商」标签,选中你已配置的OIDC提供商(比如Facebook)
  3. 在「属性映射」区域:
    • 先在用户池的「属性」标签创建一个自定义属性(比如custom:provider_access_token)
    • 回到身份提供商配置,添加映射规则:把OIDC提供商返回的access_token字段,映射到你刚创建的自定义属性
    • 如果需要refresh_token,同理映射refresh_token字段(注意部分提供商需要额外开启offline_access权限才会返回refresh_token)
  4. 确认应用客户端设置:在用户池的「应用客户端」标签,选中你的应用,确保OAuth 2.0范围包含openid以及提供商要求的额外范围(比如Facebook的public_profile)

二、后端获取第三方Token的两种方式

方式1:通过Cognito用户属性直接读取

当用户完成第三方登录后,Cognito会自动把提供商的token存入你配置的自定义属性里,后端可以调用Cognito的AdminGetUser接口获取:

  • 示例Python代码:
import boto3

cognito_client = boto3.client('cognito-idp')

def get_provider_access_token(user_pool_id, username):
    response = cognito_client.admin_get_user(
        UserPoolId=user_pool_id,
        Username=username
    )
    for attr in response['UserAttributes']:
        if attr['Name'] == 'custom:provider_access_token':
            return attr['Value']
    return None
  • 注意:调用这个接口需要IAM用户拥有cognito-idp:AdminGetUser权限

方式2:通过联合身份池获取(如果你用了Cognito Identity Pool)

如果你的架构用到了联合身份池,可以通过以下步骤获取:

  1. 用户登录后,前端拿到Cognito用户池的ID Token
  2. 后端用这个ID Token调用GetId接口获取身份ID
  3. 再调用GetUserIdentityAttributes接口,返回结果中会包含第三方提供商的token信息
  • 示例Python代码片段:
identity_client = boto3.client('cognito-identity')

# 先获取身份ID
id_response = identity_client.get_id(
    IdentityPoolId='你的联合身份池ID',
    Logins={
        'cognito-idp.区域.amazonaws.com/你的用户池ID': '用户的Cognito ID Token'
    }
)
identity_id = id_response['IdentityId']

# 再获取身份属性,包含第三方token
attr_response = identity_client.get_user_identity_attributes(
    IdentityId=identity_id
)
# 遍历属性找到提供商的token
for attr in attr_response['IdentityAttributes']:
    if 'provider_access_token' in attr['Name']:
        provider_token = attr['Value']
        break

注意事项

  • 部分OIDC提供商(比如Facebook)默认不返回refresh_token,需要在授权请求中添加offline_access scope
  • 第三方token有有效期,要根据提供商的规则处理刷新逻辑
  • 确保后端调用Cognito接口的IAM权限配置正确

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:38:32