一、先决条件(申请资格)
想开游戏服务器公司?得先找Hytale官方认证:联系客服:去Hytale支持页面,选"游戏服务器提供商"这个工单主题
必须提供四样东西:
[TABLE]
[TR]
[TH][LEFT]要啥[/LEFT][/TH]
[TH][LEFT]你给啥[/LEFT][/TH]
[TH][LEFT]审核标准[/LEFT][/TH]
[/TR]
[TR]
[TD][LEFT]Hytale账号[/LEFT][/TD]
[TD][LEFT]邮箱或UUID[/LEFT][/TD]
[TD][LEFT]必须是标准版或更高级的账号[/LEFT][/TD]
[/TR]
[TR]
[TD][LEFT]域名匹配[/LEFT][/TD]
[TD][LEFT]你的公司商店网址[/LEFT][/TD]
[TD][LEFT]账号邮箱域名要跟商店域名一致(比如[email]support@example.com[/email]对应store.example.com)[/LEFT][/TD]
[/TR]
[TR]
[TD][LEFT]公司注册[/LEFT][/TD]
[TD][LEFT]政府注册链接(最好)或官方注册文件[/LEFT][/TD]
[TD][LEFT]公司名必须跟网站上显示的法律实体完全一致[/LEFT][/TD]
[/TR]
[TR]
[TD][LEFT]网站验证[/LEFT][/TD]
[TD][LEFT]直接的公司网站URL[/LEFT][/TD]
[TD][LEFT]显示的公司名必须跟注册名一样,域名要跟邮箱域名匹配[/LEFT][/TD]
[/TR]
[TR]
[TD][LEFT]联系邮箱[/LEFT][/TD]
[TD][LEFT]滥用/技术/管理三个联系人邮箱[/LEFT][/TD]
[TD][LEFT]全都要用公司域名邮箱,其中滥用联系邮箱必须有24小时响应承诺[/LEFT][/TD]
[/TR]
[/TABLE]
审核通过后会给你三样东西:
- 带sessions.unlimited_servers权限的账号——能开无限个服务器(默认只能开100个)
- game.base游戏所有权
- GSP专属Discord频道——直接跟Hypixel Studios工程师和其他服务器提供商交流技术
[HR][/HR]
二、超简流程(想快速上手看这里)
适用对象:需要管理100+服务器,想全自动开服的老板四步走战略:
- 获取权限——联系Hytale客服,提交公司资料,拿到无限开服授权
- 一次性拿令牌——用"设备码流程"(后面会讲)获取refresh_token(这个能管30天)
- 创建会话——调用API:先/my-account/get-profiles获取账号信息,再/game-session/new获取sessionToken和identityToken
- 把令牌给服务器——启动服务器时加上:
--session-token "<sessionToken>" \
--identity-token "<identityToken>"
或者设置环境变量:
export HYTALE_SERVER_SESSION_TOKEN="eyJhbGc..."
export HYTALE_SERVER_IDENTITY_TOKEN="eyJhbGc..."
- 记得刷新——游戏会话1小时过期,到期前用refresh_token换新的access_token,再创建新会话
[HR][/HR]
三、认证方法详解(四种方式)
方法A:服务器控制台命令(适合手动操作)
直接在服务器里输命令:[TABLE]
[TR]
[TH][LEFT]命令[/LEFT][/TH]
[TH][LEFT]干啥的[/LEFT][/TH]
[/TR]
[TR]
[TD][LEFT]/auth login device[/LEFT][/TD]
[TD][LEFT]启动设备码流程(推荐,适合没桌面的服务器)[/LEFT][/TD]
[/TR]
[TR]
[TD][LEFT]/auth login browser[/LEFT][/TD]
[TD][LEFT]启动浏览器登录(需要桌面环境)[/LEFT][/TD]
[/TR]
[TR]
[TD][LEFT]/auth select <数字>[/LEFT][/TD]
[TD][LEFT]账号有多个游戏角色时,选一个[/LEFT][/TD]
[/TR]
[TR]
[TD][LEFT]/auth status[/LEFT][/TD]
[TD][LEFT]查看当前登录状态[/LEFT][/TD]
[/TR]
[TR]
[TD][LEFT]/auth cancel[/LEFT][/TD]
[TD][LEFT]取消正在进行的登录[/LEFT][/TD]
[/TR]
[TR]
[TD][LEFT]/auth logout[/LEFT][/TD]
[TD][LEFT]退出登录,清掉令牌[/LEFT][/TD]
[/TR]
[/TABLE]
示例:
[QUOTE] /auth login device[/QUOTE]
===================================================================
DEVICE AUTHORIZATION
===================================================================
访问: https://accounts.hytale.com/device
输入代码: ABCD-1234
或者访问: https://accounts.hytale.com/device?user_code=ABCD-1234
===================================================================
等待授权中(900秒后过期)...
[用户在浏览器里完成授权]
[QUOTE] 登录成功!模式: OAUTH_DEVICE[/QUOTE]
[HR][/HR]
方法B:设备码流程(RFC 8628标准,适合自动化)
第一步:要设备代码curl -X POST "https://oauth.accounts.hytale.com/oauth2/device/auth" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=hytale-server" \
-d "scope=openid offline auth:server"
返回:
{
"device_code": "GmRhmhcxhwAzkoEqiMEg_DnyEysNkuNhszIySk9eS",
"user_code": "ABCD-1234",
"verification_uri": "https://accounts.hytale.com/device",
"verification_uri_complete": "https://accounts.hytale.com/device?user_code=ABCD-1234",
"expires_in": 900,
"interval": 5
}
第二步:给用户看提示
- 网址:verification_uri或verification_uri_complete
- 代码:user_code(如果用第一个网址才需要)
curl -X POST "https://oauth.accounts.hytale.com/oauth2/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=hytale-server" \
-d "grant_type=urn:ietf:params:oauth:grant-type:device_code" \
-d "device_code=GmRhmhcxhwAzkoEqiMEg_DnyEysNkuNhszIySk9eS"
还没授权时返回:
{"error": "authorization_pending"}
成功时返回:
{
"access_token": "eyJhbGc...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "xreEsdDGrfIaQc...",
"scope": "openid offline auth:server"
}
第四步:获取可用账号信息
curl -X GET "https://account-data.hytale.com/my-account/get-profiles" \
-H "Authorization: Bearer <access_token>"
返回:
{
"owner": "550e8400-e29b-41d4-a716-446655440000",
"profiles": [{
"uuid": "123e4567-e89b-12d3-a456-426614174000",
"username": "ServerOperator"
}]
}
第五步:创建游戏会话
curl -X POST "https://sessions.hytale.com/game-session/new" \
-H "Authorization: Bearer <access_token>" \
-H "Content-Type: application/json" \
-d '{"uuid": "123e4567-e89b-12d3-a456-426614174000"}'
返回:
{
"sessionToken": "eyJhbGc...",
"identityToken": "eyJhbGc...",
"expiresAt": "2026-01-07T15:00:00Z"
}
这两个Token就是服务器要用的!
[HR][/HR]
方法C:令牌透传(适合托管服务商)
启动服务器时直接把令牌塞进去:环境变量方式:
export HYTALE_SERVER_SESSION_TOKEN="eyJhbGc..."
export HYTALE_SERVER_IDENTITY_TOKEN="eyJhbGc..."
./hytale-server
命令行参数方式:
./hytale-server \
--session-token "eyJhbGc..." \
--identity-token "eyJhbGc..." \
--owner-uuid "123e4567-e89b-12d3-a456-426614174000"
特点:
- 服务器运行在EXTERNAL_SESSION模式
- 到期前5分钟自动刷新
- 适合你把令牌管理外包给其他系统
方法D:凭证存储API(开发中,未来用)
干啥的:让你用插件或程序来存令牌,重启服务器也不丢接口定义:
public interface IAuthCredentialStore {
record OAuthTokens(
@Nullable String accessToken,
@Nullable String refreshToken,
@Nullable Instant accessTokenExpiresAt
) {}
void setTokens(@Nonnull OAuthTokens tokens);
@Nonnull OAuthTokens getTokens();
void setProfile(@Nullable UUID uuid);
@Nullable UUID getProfile();
void clear();
}
怎么用:
- 实现这个接口(存数据库、文件都行)
- 启动前注册:ServerAuthManager.getInstance().registerCredentialStore(store)
- 服务器自动从你那拿令牌、刷新、存回去
- 认证模式会变成OAUTH_STORE
- 必须在任何认证发生前注册
- 如果getProfile()返回UUID,自动选那个角色
四、API参考(技术细节)
1. 创建游戏会话
POST /game-session/newHost: sessions.hytale.com
Authorization: Bearer <oauth_access_token>
Content-Type: application/json
{"uuid": "<profile_uuid>"}
2. 获取账号信息
GET /my-account/get-profiles
Host: account-data.hytale.com
Authorization: Bearer <oauth_access_token>
3. 刷新会话
POST /game-session/refreshHost: sessions.hytale.com
Authorization: Bearer <session_token>
4. 结束会话(服务器关的时候调用)
DELETE /game-sessionHost: sessions.hytale.com
Authorization: Bearer <session_token>
5. 刷新OAuth令牌
curl -X POST "https://oauth.accounts.hytale.com/oauth2/token" \-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=hytale-server" \
-d "grant_type=refresh_token" \
-d "refresh_token=<refresh_token>"
[HR][/HR]
五、令牌生命周期(多久过期)
[TABLE]
[TR]
[TH][LEFT]令牌类型[/LEFT][/TH]
[TH][LEFT]存活时间[/LEFT][/TH]
[TH][LEFT]备注[/LEFT][/TH]
[/TR]
[TR]
[TD][LEFT]OAuth Access Token[/LEFT][/TD]
[TD][LEFT]1小时[/LEFT][/TD]
[TD][LEFT]用来创建游戏会话[/LEFT][/TD]
[/TR]
[TR]
[TD][LEFT]OAuth Refresh Token[/LEFT][/TD]
[TD][LEFT]30天[/LEFT][/TD]
[TD][LEFT]用来换新的Access Token[/LEFT][/TD]
[/TR]
[TR]
[TD][LEFT]Game Session[/LEFT][/TD]
[TD][LEFT]1小时[/LEFT][/TD]
[TD][LEFT]服务器到期前5分钟自动刷新[/LEFT][/TD]
[/TR]
[/TABLE]
刷新策略:
- 服务器会在令牌过期前5分钟自动刷新
- 如果游戏会话刷新失败,会退回去刷新OAuth令牌
六、错误处理
常见HTTP错误
- 400 Bad Request:请求格式错了或缺参数
- 401 Unauthorized:没登录或登录信息不对
- 403 Forbidden:登录了但权限不够(没授权、超过会话限制)
- 404 Not Found:资源不存在(比如UUID错了)
会话限制错误
没sessions.unlimited_servers权限的账号最多100个并发会话,超了返回403 Forbidden令牌验证失败
启动时如果令牌不对,会提示:复制
Token validation failed. Server starting unauthenticated.
Use /auth login to authenticate.
常见原因:
- 令牌过期了
- 签名无效
- 缺少必要权限范围(hytale:server)
七、JWKS终端(验证玩家用)
服务器用公钥验证玩家的JWT令牌:请求:
GET /.well-known/jwks.json
Host: sessions.hytale.com
返回:
{
"keys": [{
"kty": "OKP",
"alg": "EdDSA",
"use": "sig",
"kid": "key-id-1",
"crv": "Ed25519",
"x": "base64url-encoded-public-key"
}]
}
[HR][/HR]
八、其他工具
Hytale下载器CLI
作用:自动下载和更新服务器文件,集成到你的配置系统里下载:hytale-downloader.zip(含快速启动脚本,支持Linux和Windows)
文档:看官方服务器手册里的《Hytale下载器CLI》章节
[HR][/HR]
九、核心信息总结
OAuth客户端信息:- Client ID: hytale-server
- 权限范围(Scopes): openid, offline, auth:server
- 授权:https://oauth.accounts.hytale.com/oauth2/auth
- 令牌:https://oauth.accounts.hytale.com/oauth2/token
- 设备授权:https://oauth.accounts.hytale.com/oauth2/device/auth
[HR][/HR]
十、规划中的功能
官方正在开发CLI工具来自动化令牌获取和刷新,但现在还没好。想了解进度,去GSP专属Discord频道看公告。[HR][/HR]
最后提醒:整个流程的核心是——拿到30天有效的refresh_token → 每小时用它换access_token → 用access_token创建游戏会话 → 把sessionToken和identityToken给服务器。记住这个链条,其他的都是细节!