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
相关产品推荐
相关产品推荐

