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

如何通过Netcode for GameObjects实现客户端向游戏服务器传输登录令牌?

基于Netcode for GameObjects(NGO)的登录令牌验证实现方案

完全不用额外套TCP/UDP,NGO本身就支持在连接阶段嵌入自定义验证逻辑,直接用它的连接审批机制就能搞定,步骤如下:

1. 客户端:发起连接时携带令牌

拿到认证API返回的令牌后,把令牌编码成字节数组塞进NGO的连接配置里,再发起连接:

// 客户端代码
string authToken = "从认证API获取的有效令牌";
// 将令牌转为字节数组,塞进NGO的连接数据中
NetworkManager.Singleton.NetworkConfig.ConnectionData = System.Text.Encoding.UTF8.GetBytes(authToken);
// 发起客户端连接
NetworkManager.Singleton.StartClient();

2. 服务器:开启连接审批并验证令牌

服务器必须启用连接审批功能,这是NGO处理自定义验证的核心:

第一步:启用连接审批

在Unity编辑器的NetworkManager组件面板中,勾选Enable Connection Approval选项。

第二步:编写验证逻辑

注册审批回调函数,在回调里解析客户端传来的令牌并验证有效性:

// 服务器初始化代码
void Start()
{
    // 注册连接审批回调
    NetworkManager.Singleton.NetworkConfig.ConnectionApprovalCallback += OnConnectionApproval;
    // 启动服务器
    NetworkManager.Singleton.StartServer();
}

// 连接审批回调
private void OnConnectionApproval(NetworkManager.ConnectionApprovalRequest request, NetworkManager.ConnectionApprovalResponse response)
{
    // 解析客户端传来的令牌
    string authToken = System.Text.Encoding.UTF8.GetString(request.Payload);

    // 调用自定义逻辑验证令牌(比如查数据库、校验JWT签名等)
    bool isTokenValid = ValidateAuthToken(authToken);

    // 设置审批结果
    response.Approved = isTokenValid;
    response.CreatePlayerObject = isTokenValid; // 验证通过才创建玩家对象
    response.Reason = isTokenValid ? "验证通过" : "无效或过期的令牌";
}

// 自定义令牌验证方法
private bool ValidateAuthToken(string token)
{
    // 这里实现你的验证逻辑:
    // 比如检查数据库中是否存在该令牌、是否未过期、是否绑定合法用户ID
    // 示例逻辑(替换为实际业务代码):
    return !string.IsNullOrEmpty(token) && CheckTokenInDatabase(token);
}

3. 额外注意事项

  • 推荐用JWT作为令牌格式,服务器可以直接解析令牌中的用户ID、过期时间等信息,不用每次都查数据库,提升验证效率。
  • 验证失败时,客户端可以监听NetworkManager.Singleton.OnClientDisconnectCallback,获取断开原因并提示用户重新登录。
  • 敏感场景下可以对令牌做额外加密(比如AES),不过NGO默认的连接传输已经有加密,配合HTTPS获取令牌的流程,安全性足够。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 12:55:59