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

调用Google federatedSignIn返回NotAuthorizedException问题求助

解决Cognito联合登录Google时的NotAuthorizedException错误

我来帮你排查这个问题,这个错误本质是Cognito身份池不承认你传入的Google令牌,大概率是配置细节或者令牌传递的问题,咱们一步步梳理可能的原因和解决办法:

1. 先确认传递的是Google ID Token而非Access Token

angular5-social-login返回的userData里包含两种令牌,但Cognito的federatedSignIn只认ID Token,不是Access Token。你可以在代码里明确指定使用ID Token:

this.socialAuthService.signIn(socialPlatformProvider).then((userData) => {
  // 务必使用idToken,不要用accessToken
  const validGoogleToken = userData.idToken;
  // 调用Cognito的联合登录接口
  Auth.federatedSignIn('google', { token: validGoogleToken }, {})
    .then(res => console.log("登录成功", res))
    .catch(err => console.error("登录失败", err));
});

你可以打印userData.idToken看看,正常的ID Token是JWT格式的三段式字符串(用.分隔)。

2. 核对Cognito身份池的Google提供商配置

进入AWS控制台的Cognito身份池,检查「联合身份提供商」下的Google配置:

  • 确保客户端ID和你在Google Cloud Console创建的OAuth 2.0客户端ID完全一致,注意大小写、特殊字符,不能有任何拼写错误。
  • 确认Google提供商处于启用状态,没有被意外禁用。

同时在Google Cloud Console里:

  • 对应的OAuth客户端要开启Google+ API或People API(部分旧版本SDK依赖)。
  • 重定向URI虽然前端登录用得少,但也要确保配置的域名和你的应用匹配(比如http://localhost:4200本地开发环境)。

3. 验证Google ID Token的受众(Audience)是否匹配

用jwt.io解码你的Google ID Token,查看aud字段,这个值必须和Cognito里配置的Google客户端ID完全一致。如果aud是另一个客户端ID,说明你用错了Google应用的令牌,得检查angular5-social-login的配置是否正确。

4. 检查Cognito身份池的信任关系策略

身份池关联的IAM角色信任策略必须允许Google作为身份提供商,策略里需要包含类似这样的语句:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "accounts.google.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "accounts.google.com:aud": "你的Google客户端ID"
        }
      }
    }
  ]
}

如果这里的aud不匹配,或者没有添加Google的Federated主体,就会触发授权错误。

5. 确认angular5-social-login的配置正确性

在你的app.module.ts里,Google提供商的客户端ID必须和Cognito、Google Cloud里的完全一致:

import { SocialLoginModule, SocialAuthServiceConfig } from 'angular5-social-login';
import { GoogleLoginProvider } from 'angular5-social-login';

@NgModule({
  imports: [SocialLoginModule],
  providers: [
    {
      provide: 'SocialAuthServiceConfig',
      useValue: {
        autoLogin: false,
        providers: [
          {
            id: GoogleLoginProvider.PROVIDER_ID,
            provider: new GoogleLoginProvider(
              "你的Google客户端ID" // 必须和其他配置保持一致
            )
          }
        ]
      } as SocialAuthServiceConfig,
    }
  ]
})

总结

最常见的问题就是令牌类型错误、客户端ID不匹配或者信任策略配置缺失,你可以按照上面的步骤逐一排查,基本能解决这个NotAuthorizedException问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:35:07