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

OpenID Connect Firebase集成Unity认证报错:invalid audience(401)

解决UGS OpenID Connect登录的"invalid audience" 401错误

错误原因分析

"invalid audience"错误的核心是Firebase生成的ID Token中的aud(受众)字段,与Unity Authentication服务中OIDC提供商配置的受众列表不匹配,导致UGS拒绝验证该Token。

排查与修复步骤

1. 检查Unity OIDC提供商配置

  • 确认提供商ID一致性:在Unity Dashboard的「Authentication > OpenID Connect」页面,找到你创建的Firebase提供商,记录其Provider ID,确保代码中调用SignInWithOpenIdConnectAsync时传入的ProviderId与该值完全一致(大小写敏感)。
  • 验证受众(Audience)设置:
    • 将Firebase项目的Client ID(可在Firebase控制台「项目设置 > 应用 > Web应用」中找到)添加到Unity OIDC配置的「Audiences」列表中。
    • 同时添加你的Unity Cloud Project ID(可在Unity编辑器「Project Settings > Services」页面查看)到受众列表,确保Token的aud字段匹配其中任意一项。
  • 核对Issuer URL:Unity OIDC配置中的「Issuer URL」必须设置为Firebase的OIDC issuer地址,格式为:https://securetoken.google.com/<你的Firebase项目ID>,注意替换为实际的Firebase项目ID。

2. 修正Firebase ID Token的获取逻辑

调用Firebase的TokenAsync方法时,需明确指定匹配Unity受众的参数,确保生成的ID Token包含正确的aud字段:

// 替换为Unity OIDC配置中添加的受众值(Firebase Client ID或Unity Cloud Project ID)
string targetAudience = "your-target-audience-value";
FirebaseUser user = FirebaseAuth.DefaultInstance.CurrentUser;
string idToken = await user.TokenAsync(true, targetAudience);
  • 第一个参数forceRefresh设置为true,确保获取最新的Token,避免使用缓存的旧Token。
  • 第二个参数audience必须与Unity OIDC配置中的受众完全一致。

3. 规范UGS登录调用参数

调用SignInWithOpenIdConnectAsync时,确保参数正确传递:

var signInOptions = new SignInWithOpenIdConnectOptions
{
    ProviderId = "your-unity-oidc-provider-id", // 对应Unity Dashboard中的Provider ID
    IdToken = idToken // 从Firebase获取的ID Token
};

try
{
    await AuthenticationService.Instance.SignInWithOpenIdConnectAsync(signInOptions);
    // 登录成功,可访问Cloud Save、Economy等UGS服务
}
catch (AuthenticationException ex)
{
    Debug.LogError($"登录失败: {ex.Message}");
}

4. 额外验证步骤

  • 解码Firebase返回的ID Token,检查aud字段的值是否在Unity OIDC配置的受众列表中。可通过编写简单的JWT解析代码实现:
    // 简单JWT解码示例(仅提取payload部分)
    string[] parts = idToken.Split('.');
    string payloadJson = Encoding.UTF8.GetString(Convert.FromBase64String(parts[1].PadRight(parts[1].Length + (4 - parts[1].Length % 4) % 4, '=')));
    Debug.Log($"Token Payload: {payloadJson}");
    
    查看输出的payloadJson中的aud字段,确认其值存在于Unity OIDC的受众列表中。
  • 确认Unity Dashboard中的OIDC提供商状态为「Active」,未被禁用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:30:44