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

如何在Unity中通过Google登录获取AWS Cognito ID Token(无需外部浏览器)

解决方案:Unity内通过Google登录获取AWS Cognito ID Token(无外部浏览器)

核心思路是用Google Unity SDK获取Google ID Token,再通过Cognito API将其交换为Cognito ID Token,全程在App内完成,无需托管UI或外部浏览器跳转。

步骤1:配置Google OAuth客户端

  • 登录Google Cloud控制台,创建对应Unity目标平台(Android/iOS)的OAuth 2.0客户端ID
    • Android:填写Unity打包时使用的SHA-1指纹和应用包名
    • iOS:填写应用Bundle ID
  • 确保Google客户端的授权范围包含openid、email、profile(Cognito验证需要这些字段)

步骤2:集成Google Sign-In Unity SDK

  • 导入Google Sign-In SDK到Unity项目,在设置面板填入步骤1创建的客户端ID
  • 调用Google登录API获取ID Token,核心代码示例:
using GoogleSignIn;

public async void GoogleLogin()
{
    var signIn = GoogleSignIn.DefaultInstance;
    signIn.Configuration = new GoogleSignInConfiguration
    {
        ClientId = "你的Google客户端ID",
        RequestIdToken = true // 必须开启,才能获取ID Token
    };

    try
    {
        var user = await signIn.SignInAsync();
        string googleIdToken = user.IdToken;
        // 拿到Google ID Token后,进入Cognito交换流程
        await ExchangeGoogleTokenForCognitoIdToken(googleIdToken);
    }
    catch (Exception e)
    {
        Debug.LogError($"Google登录失败: {e.Message}");
    }
}

步骤3:配置AWS Cognito用户池

  • 在AWS控制台打开目标用户池,添加Google作为身份提供商:
    • 填入Google客户端ID和客户端密钥
    • 设置授权范围为openid email profile
  • 找到用户池的App客户端,确保:
    • 未启用托管UI
    • 允许的认证流程包含AUTHENTICATION_TOKEN_AUTH(或CUSTOM_AUTH,视版本而定)
    • 如果是移动App客户端,建议禁用客户端密钥(避免硬编码风险)

步骤4:Unity内调用Cognito API交换ID Token

  • 导入AWS SDK for Unity,配置Cognito用户池ID、App客户端ID和区域
  • 编写代码将Google ID Token传给Cognito,获取Cognito ID Token:
using Amazon.CognitoIdentityProvider;
using Amazon.CognitoIdentityProvider.Model;
using Amazon.Runtime;

public async Task ExchangeGoogleTokenForCognitoIdToken(string googleIdToken)
{
    var credentials = new AnonymousAWSCredentials();
    var client = new AmazonCognitoIdentityProviderClient(credentials, Amazon.RegionEndpoint.你的Cognito区域);

    var request = new InitiateAuthRequest
    {
        ClientId = "你的Cognito App客户端ID",
        AuthFlow = AuthFlowType.AuthenticationTokenAuth, // 指定用第三方Token认证
        AuthParameters = new Dictionary<string, string>
        {
            { "TOKEN", googleIdToken } // 传入Google的ID Token
        }
    };

    try
    {
        var response = await client.InitiateAuthAsync(request);
        string cognitoIdToken = response.AuthenticationResult.IdToken;
        Debug.Log($"获取Cognito ID Token成功: {cognitoIdToken}");
        // 后续可使用此ID Token进行Cognito相关操作
    }
    catch (Exception e)
    {
        Debug.LogError($"交换Token失败: {e.Message}");
    }
}

关键注意事项

  • Google ID Token必须与Cognito中配置的Google身份提供商客户端ID匹配,否则Cognito会拒绝验证
  • Unity打包时,Android的SHA-1、iOS的Bundle ID必须与Google Cloud控制台配置完全一致,否则Google登录会报错
  • AWS SDK区域必须与Cognito用户池所在区域一致
  • 避免在Unity代码中硬编码敏感信息(如Google客户端密钥、Cognito客户端密钥),移动App建议使用无客户端密钥的App客户端

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 15:00:59