身份验证故障排查
使用确切的控制台消息、错误代码以及 API Key 和 Auth Token 模式的原因来修复 Convai Unity SDK 身份验证失败。
使用确切的控制台消息或 SessionErrorCodes 使用 SDK 返回的值。连接尝试失败后,或您配置的令牌端点未被正确访问时,请使用此页面。
症状表
身份验证令牌端点必须使用 HTTPS,但本地开发期间使用的 HTTP 回环 URL 除外。
已配置的 令牌端点 URL 是普通 HTTP,且不是回环地址。
将端点改为 HTTPS,或使用 http://127.0.0.1 / http://localhost 地址,仅用于本地开发。
重新连接;现在端点请求会成功,而不是在校验时失败。
身份验证令牌端点未返回任何响应。 / ...传输失败。
端点无法访问——主机错误、网络故障,或服务器已关闭。
确认端点 URL 正确,并且服务器正在运行,且可从构建目标的网络访问。
重新连接,并确认请求已到达您服务器的访问日志。
身份验证令牌端点返回了 HTTP {code}。
端点返回了非 2xx 状态。
在服务器日志中查看返回的状态码,并修复根本故障(认证、速率限制、服务器错误)。
在服务器返回后重新连接 200.
身份验证令牌端点返回了格式错误的 JSON。
端点的响应体不是有效的 JSON。
返回一个包含 token 字段的 JSON 对象,例如 {"apiAuthToken": "..."}.
重新连接;SDK 解析响应时不会出错。
未找到身份验证令牌响应字段“{field}”。
响应 JSON 不包含在以下位置配置的字段 令牌响应字段 (默认 apiAuthToken).
匹配 令牌响应字段 到您的端点返回的实际 JSON 键名,包括嵌套字段的点路径,例如 data.token.
重新连接;SDK 将从更正后的字段读取令牌。
...为空。 (已找到响应字段,但为空)
响应字段存在,但其值为空字符串。
修复生成令牌的服务器逻辑——它虽然成功返回,但没有令牌值。
重新连接并确认该字段已有内容。
...包含无效的 expirationTime。
可选的 expirationTime 字段不是可解析的时间戳。
返回 expirationTime 请将其作为 ISO-8601 字符串返回;如果不使用该字段,则完全省略它。
重新连接;SDK 接受该响应。
身份验证令牌委托未返回任务。 / ...返回了空令牌。
某个 DelegateAuthTokenProvider lambda 返回了 null 而不是令牌,而是空字符串。
修复委托,使其始终返回非空的令牌字符串,或抛出/等待适当的失败。
重新连接;委托返回有效令牌。
身份验证令牌委托失败({ExceptionType})。
该 DelegateAuthTokenProvider lambda 抛出了异常。
检查消息中的异常类型,并修复委托中的根本故障。
在委托停止抛出异常后重新连接。
Auth Token 模式需要已注册的 IConvaiAuthTokenProvider 或已配置的端点 URL。 (ConfigAuthTokenProviderMissing)
认证模式 为 Auth Token,但未注册提供程序,且未 令牌端点 URL 配置。
注册一个 IConvaiAuthTokenProvider ,然后再进行首次连接;或者配置一个 令牌端点 URL 中的 Convai > Settings > 凭据.
重新连接;错误不再出现。
身份验证令牌提供程序失败({ExceptionType})。 / ...未能解析令牌。 / ...返回了空令牌。
您注册的 IConvaiAuthTokenProvider 实现抛出异常、失败,或返回了空令牌。
检查异常类型或失败原因,并修复 GetTokenAsync 您提供程序中的问题。
在提供程序返回有效且非空的令牌后重新连接。
显式的身份验证令牌连接需要在 Convai 项目设置中启用 Auth Token 模式。 (ConfigAuthTokenModeRequired)
ConnectWithAuthTokenAsync 在以下情况下被调用 认证模式 仍然是 API 密钥.
将 认证模式 到 Auth Token 中的 Convai > Settings > 凭据 在调用 ConnectWithAuthTokenAsync.
重新连接;显式令牌会被接受。
需要非空的 Convai 身份验证令牌。
ConnectWithAuthTokenAsync 在传入空值或仅包含空白字符的 authToken 参数时被调用。
请确认您的登录流程在调用前已获取令牌 ConnectWithAuthTokenAsync;不要使用占位符值调用它。
使用真实令牌重新连接。
需要非空的终端用户 ID。 / 需要非空的终端用户名称。
ConnectWithAuthTokenAsync 在传入空的 endUserId 或 endUserName 参数时被调用。
请为每次调用传入非空、稳定的账号 ID 和显示名称。
重新连接时请填充这两个参数。
连接失败,报错 连接令牌无效 (ConnectionInvalidToken)
Convai 拒绝了令牌——它已过期、格式错误,或者并不是您的端点最近签发的令牌。
确认您的端点每次请求都返回新签发的令牌,并且没有任何缓存层提供过期的令牌。
重新连接;新令牌会被接受。
连接失败,HTTP 401
room-connect 请求在传输层被拒绝,SDK 将其映射为 ConnectionInvalidToken.
确认端点或提供程序返回的是 apiAuthToken ——而不是游戏登录令牌、刷新令牌或 Convai 账号 API 密钥——并且该令牌未过期。
重新连接;连接成功。
在编辑器能够生成身份验证令牌之前,必须先在 Convai 项目设置中保存 API 密钥。
仅限编辑器的回退提供程序尝试运行,但未保存 API 密钥。
在以下位置保存 API 密钥: Convai > Settings > 凭据,即使在身份验证令牌模式下也是如此,这样编辑器回退也可以在本地生成令牌。
再次进入播放模式;回退提供程序会成功。
身份验证令牌模式在编辑器中可用,但在玩家构建中会立即失败
仅限编辑器的回退提供程序(ConvaiEditorApiKeyAuthTokenProvider)一直在静默地替代缺失的提供程序或端点。它不会被编译进玩家版本。
注册一个运行时 IConvaiAuthTokenProvider,或者配置一个 令牌端点 URL,这样玩家构建就有一个真实的凭据来源。
运行构建;连接会在没有编辑器回退的情况下成功。
在播放模式下更改端点配置不会影响当前会话
凭据在每次连接尝试时只解析一次,而不是持续解析。
更改端点、请求头或提供程序后,结束会话并重新连接。
下一次连接尝试会使用更新后的配置。
端点不是 HTTPS
症状: 控制台日志 身份验证令牌端点必须使用 HTTPS,但本地开发期间使用的 HTTP 回环 URL 除外。
原因: EndpointAuthTokenProvider 会在每次请求前验证 令牌端点 URL ,并拒绝除 https://之外的任何协议,除非主机是回环地址(127.0.0.1 或 localhost),用于本地开发。
解决方法: 将端点更改为 https://。如果您正在测试本地服务器,请使用回环地址,而不是局域网 IP 或公共 HTTP 隧道。
验证: 重新连接。请求会到达您的服务器,而不是在发送前因校验失败。
端点响应缺少令牌字段
症状: 控制台日志 未找到身份验证令牌响应字段 'apiAuthToken'。 (或您配置的其他字段名)。
原因: EndpointAuthTokenProvider 会解析 JSON 响应并查找 令牌响应字段,其默认值为 apiAuthToken ,并支持如下点路径: data.token。如果您的服务器响应使用了不同的键,或者将令牌嵌套在与所配置字段不匹配的路径下,则解析会失败。
解决方法: 要么修改服务器,使其在以下位置返回令牌: apiAuthToken 作为顶层字段,要么更新 令牌响应字段 中的 Convai > Settings > 凭据 以匹配您服务器的实际响应结构。
验证: 重新连接。SDK 会从响应中读取令牌,而不是报告缺失字段。
提供程序注册得太晚
症状: 进入播放模式后或构建启动后,首次连接尝试会失败,报错 Auth Token 模式需要已注册的 IConvaiAuthTokenProvider 或已配置的端点 URL。,即使您的代码注册了提供程序。
原因: ConvaiAuthTokenProviderRegistry 是一个进程内的静态注册表,会在以下情况下自动重置: RuntimeInitializeLoadType.SubsystemRegistration ——每次域重新加载和每次进入播放模式都会清空它。在 SDK 首次连接尝试之后才初始化的组件中注册的提供程序,或者在重新加载后从未重新注册的提供程序,都会在 SDK 需要时使注册表为空。
解决方法: 尽早注册提供程序,例如在场景引导组件的 Awake 方法中,并在任何可能清空它的域重新加载或场景重新加载之后再次注册。如果您的登录 SDK 是异步初始化的,请立即注册提供程序,并让提供程序自身的令牌获取逻辑在内部等待登录初始化——不要延迟注册本身。
验证: 修复后重新连接。 IsRegistered 会在注册后立即反映该提供程序,连接也会解析出令牌,而不是报告缺少提供程序。
未为显式令牌连接选择身份验证令牌模式
症状: ConnectWithAuthTokenAsync 会立即失败,报错 显式的身份验证令牌连接需要在 Convai 项目设置中启用 Auth Token 模式。
原因: RoomConnectionRuntimeAdapter 会检查当前活动的凭据提供程序是否实现了显式令牌契约,这只有在 认证模式 为 Auth Token。在以下情况下调用 ConnectWithAuthTokenAsync ,而项目仍处于 API 密钥 模式时,会在任何网络请求发出之前使此检查失败。
解决方法: 将 认证模式 到 Auth Token 中的 Convai > Settings > 凭据。您无需为此路径配置 令牌端点 URL ,也无需注册提供程序——调用方会直接提供令牌。
验证: 使用以下方式重新连接: ConnectWithAuthTokenAsync。调用会继续通过凭据验证,而不会立即失败。
连接时出现 HTTP 401
症状: room-connect 请求返回 HTTP 401,SDK 将其报告为 连接令牌无效 (ConnectionInvalidToken).
原因: Convai 拒绝了发送在 API-AUTH-TOKEN 标头中的令牌。这种情况发生在令牌已过期、已被使用,或者实际上并不是 Convai apiAuthToken ——例如,端点或提供程序不小心返回了游戏登录令牌或 Convai 账号 API 密钥。
解决方法: 确认您的端点或提供程序返回的是 apiAuthToken 字段的值,即 Convai 自己的令牌签发响应中的字段值,而不是其他任何凭据,并且它是为每次连接新签发的,而不是从可能过期的缓存中提供。
验证: 重新连接。新签发且来源正确的令牌会成功连接。
仅限编辑器的回退提供程序未生效
症状: 在 Unity 编辑器中,身份验证令牌模式仍然失败,报错 Auth Token 模式需要已注册的 IConvaiAuthTokenProvider 或已配置的端点 URL。,尽管已保存 API 密钥。
原因: ConvaiEditorApiKeyAuthTokenProvider 仅在以下三个条件同时满足时才会自动注册: 认证模式 为 Auth Token,已保存 API 密钥,并且未 令牌端点 URL 配置。如果 令牌端点 URL 已设置——即使是无效的——回退也不会激活,因为显式端点优先。
解决方法: 对于无需真实后端的本地编辑器测试,请清除 令牌端点 URL 并确认在以下位置已保存 API 密钥: Convai > Settings > 凭据。除编辑器测试外,不要依赖此回退——它不会被编译进任何玩家版本,因此除非配置运行时提供程序或端点,否则构建也会以相同方式失败。参见 发布安全构建.
验证: 进入播放模式。编辑器会使用已保存的 API 密钥生成令牌,连接会成功。
下一步
最后更新于
这有帮助吗?