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

如何从Cognito获取用户OAuth2令牌调用Google API的listDirectoryPeople方法

解决Cognito Google登录后获取Google OAuth2令牌调用People API的方案

1. 调整Cognito Google身份提供商配置,直接获取原始令牌

  • 进入AWS控制台的Cognito用户池,打开身份提供商下的Google配置页
  • 在授权范围中添加https://www.googleapis.com/auth/directory.readonly(listDirectoryPeople所需权限)
  • 勾选「返回身份提供商令牌」选项,这样Cognito认证成功后会将Google的Access Token和ID Token返回给前端
  • 前端通过Cognito的getUser()方法获取用户会话,在signInUserSession.idToken.payload.identities数组中找到对应Google身份的access_token字段,直接用该令牌调用People API

2. 利用Cognito联合身份池获取临时访问令牌

  • 创建或配置Cognito联合身份池,关联现有用户池作为身份源
  • 在联合身份池的身份验证提供程序中启用Google,配置匹配的客户端ID与密钥
  • 前端通过Cognito获取用户身份ID后,调用getCredentialsForIdentity()方法获取包含Google访问令牌的临时凭证
  • 确保联合身份池绑定的IAM角色拥有调用Google People API的权限,并配置正确的信任关系

3. 前端静默复用Google会话获取令牌

  • 引入Google的gapi.auth2库,在用户通过Cognito登录后初始化Google Auth实例
  • 调用signInSilently()方法,利用浏览器中已存在的Google会话(因Cognito登录已完成Google授权)静默获取令牌,无需二次弹窗
  • 示例代码:
gapi.load('auth2', () => {
  const auth2 = gapi.auth2.init({
    client_id: '你的Google客户端ID',
    scope: 'https://www.googleapis.com/auth/directory.readonly'
  });
  auth2.signInSilently().then(googleUser => {
    const accessToken = googleUser.getAuthResponse().access_token;
    // 调用People API的逻辑
  });
});
  • 需保证Google客户端ID与Cognito配置一致,且Google Cloud控制台已将当前应用域名加入授权JavaScript源

4. 后端通过Cognito用户信息换取令牌

  • 前端将Cognito的ID Token传给后端接口
  • 后端调用Cognito的GetUser API,提取用户identities中的Google用户ID
  • 若Cognito存储了Google刷新令牌,后端可通过Google OAuth2令牌端点,用刷新令牌+客户端凭证换取新的Access Token;若未存储,需提前在Cognito配置中开启刷新令牌存储

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 10:10:49