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

如何从AWS Cognito用户池获取用于Facebook API的联邦访问令牌?

获取Facebook原始访问令牌以调用Facebook API

你遇到的问题很常见——Cognito默认返回的是自身的访问令牌,但其实它已经帮你保留了Facebook的原始令牌,只需要正确的方式提取即可。下面是具体的操作步骤:

1. 确认Cognito身份提供商配置

首先要确保你的Facebook身份提供商设置正确,允许Cognito获取并存储Facebook的访问令牌:

  • 登录AWS控制台,进入目标Cognito用户池
  • 转到身份提供商页面,选择已配置的Facebook
  • 检查OAuth 2.0 范围是否包含你需要调用Facebook API的权限(比如user_posts、pages_show_list等,根据实际需求添加)
  • 确认已正确配置Facebook的App ID和App Secret,Cognito会自动处理令牌的获取与存储

2. 通过Cognito ID令牌提取Facebook令牌

用户成功登录后,Cognito返回的ID令牌(id_token)的Payload中包含了identities字段,这是一个存储第三方身份提供商信息的数组,里面就有Facebook的访问令牌:

  • 解码ID令牌(可以用JWT解码工具,或者在代码中用jsonwebtoken这类库处理)
  • 在Payload的identities数组中,找到providerName为Facebook的条目
  • 该条目里的accessToken字段就是你需要的Facebook原始访问令牌

举个JavaScript代码示例:

import jwt from 'jsonwebtoken';

// 假设已获取到用户的Cognito ID令牌
const idToken = '用户的Cognito ID令牌';
const decodedToken = jwt.decode(idToken);

// 提取Facebook访问令牌
const facebookIdentity = decodedToken.identities.find(
  item => item.providerName === 'Facebook'
);
const facebookAccessToken = facebookIdentity?.accessToken;

// 用该令牌调用Facebook API
fetch('https://graph.facebook.com/v18.0/me', {
  headers: {
    'Authorization': `Bearer ${facebookAccessToken}`
  }
})

3. 通过Cognito API获取令牌(备选方案)

如果你不想解码ID令牌,也可以调用Cognito的GetUser API(或对应SDK方法)来获取:

  • 使用用户的Cognito访问令牌调用GetUser接口
  • 在返回的UserAttributes中,找到名为identities的属性(值为JSON字符串)
  • 解析该JSON字符串,找到Facebook对应的条目并提取accessToken

示例代码(AWS SDK v3,JavaScript):

import { CognitoIdentityProviderClient, GetUserCommand } from "@aws-sdk/client-cognito-identity-provider";

const client = new CognitoIdentityProviderClient({ region: '你的AWS区域' });

const command = new GetUserCommand({
  AccessToken: '用户的Cognito访问令牌'
});

const response = await client.send(command);
const identitiesAttr = response.UserAttributes.find(attr => attr.Name === 'identities');
const identities = JSON.parse(identitiesAttr.Value);
const facebookAccessToken = identities.find(
  item => item.providerName === 'Facebook'
).accessToken;

注意事项

  • Facebook访问令牌有过期时间,你可以通过Facebook的API刷新它,或者引导用户重新登录获取新令牌
  • 确保请求的Facebook权限范围与你要调用的API匹配,否则会触发权限错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 17:47:48