using System; using System.IdentityModel.Tokens.Jwt; using Fantasy; namespace NB.Gate; public static class GateJWTHelper { /// /// 验证令牌是否合法 /// /// /// ToKen /// 如果验证成功会返回正常的AccountId /// 如果是True表示验证成功,False表示验证失败 public static bool ValidateToken(Scene scene, string token, out long accountId) { if (!ValidateToken(scene, token, out JwtPayload payload)) { // 如果令牌验证失败,表示当前令牌不合法、那就返回为false,让上层处理。 accountId = 0; return false; } // 如果不等于当前Scene的ConfigId的话,把就表示该连接不应该连接到当前的Gate里。 // 所以理应把当前连接关闭掉。 var sceneId = Convert.ToInt64(payload["SceneId"]); accountId = Convert.ToInt64(payload["aId"]); return sceneId == scene.SceneConfigId; } private static bool ValidateToken(Scene scene, string token, out JwtPayload payload) { return scene.GetComponent().ValidateToken(token, out payload); } }