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

通过ALB+Cognito认证获取临时凭证遇阻求助

问题解答

首先明确两个核心结论:

  • 你当前的代码无法直接使用访问令牌获取身份池临时凭证,因为Cognito身份池的GetId和GetCredentialsForIdentity接口要求传入ID令牌,而非访问令牌——ID令牌用于标识用户身份,访问令牌仅用于授权访问Cognito资源,二者用途不同。
  • 不能直接用请求头中的访问令牌访问身份池,身份池不支持将Cognito访问令牌作为Logins参数的有效值。

可行解决方案

既然ALB只传递访问令牌,你可以通过以下步骤间接获取身份池临时凭证:

  1. 用访问令牌获取用户身份信息
    调用Cognito用户池的GetUser接口,传入访问令牌,获取用户的用户名、用户ID等核心身份信息。

  2. 用开发者身份换取身份池令牌
    将Cognito用户池作为开发者身份源,调用身份池的GetOpenIdTokenForDeveloperIdentity接口,传入获取到的用户身份信息,拿到OpenID令牌。

  3. 获取临时凭证
    使用拿到的OpenID令牌调用GetCredentialsForIdentity接口,最终获取临时凭证。

代码示例

import boto3

# 初始化客户端
region = "your-region"
cognito_idp_client = boto3.client("cognito-idp", region_name=region)
cognito_identity_client = boto3.client("cognito-identity", region_name=region)

# 从请求头中提取ALB传递的访问令牌
access_token = "从请求头中获取的访问令牌"
identity_pool_id = "你的身份池ID"
user_pool_id = "你的用户池ID"
developer_provider_name = f"cognito-idp.{region}.amazonaws.com/{user_pool_id}"

# 步骤1:通过访问令牌获取用户信息
get_user_response = cognito_idp_client.get_user(AccessToken=access_token)
username = get_user_response["Username"]

# 步骤2:获取开发者身份对应的OpenID令牌
get_open_id_token_response = cognito_identity_client.get_open_id_token_for_developer_identity(
    IdentityPoolId=identity_pool_id,
    Logins={
        developer_provider_name: username
    }
)
identity_id = get_open_id_token_response["IdentityId"]
open_id_token = get_open_id_token_response["Token"]

# 步骤3:获取临时凭证
get_credentials_response = cognito_identity_client.get_credentials_for_identity(
    IdentityId=identity_id,
    Logins={
        "cognito-identity.amazonaws.com": open_id_token
    }
)
credentials = get_credentials_response["Credentials"]

注意事项

  • 需确保你的身份池已启用开发者身份认证,并配置对应的提供商名称。
  • 后端服务的IAM角色需要具备cognito-idp:GetUser、cognito-identity:GetOpenIdTokenForDeveloperIdentity和cognito-identity:GetCredentialsForIdentity的调用权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:48:15