跳转至

OAuth 令牌签发

调用 Hive Server API 时发出授权验证和安全身份验证所需的 OAuth 令牌。 “颁发 OAuth 令牌”API 遵循 OAuth 2.0 客户端凭据授予标准,并作为服务器到服务器身份验证流程运行,其中应用程序服务器直接调用 Hive 身份验证服务器。 “颁发 OAuth 令牌”API 具有以下特征。 - 仅使用客户端 ID 和密钥颁发令牌 - 仅颁发访问令牌(不颁发刷新令牌) - 有效期为 1 小时(3600 秒)

Note

有关颁发客户端 ID 和客户端密钥的信息,请参阅 安全密钥设置


请求网址

生产网址 https://auth.qpyou.cn/oauth/token
沙箱网址 https://sandbox-auth.qpyou.cn/oauth/token
HTTP 方法 POST
Content-Type application/json
数据格式 JSON

## 请求头
字段名称 描述
--- ---
ISCRYPT 数据是否加密(0 = 未加密;始终传递 0)

## 请求正文
字段名称 描述
--- ---
appid 应用程序 ID
grant_type 已修复为 client_credentials
client_id 客户端ID(在App Center中颁发)
client_secret 客户端密钥(在应用中心发布)

## 请求示例
### curl
curl -X POST https://auth.qpyou.cn/oauth/token \
  -H "Content-Type: application/json" \
  -d '{
    "appid": "com.com2us.hivesdk.normal.freefull.apple.global.ios.universal",
    "grant_type": "client_credentials",
    "client_id": "project_abc123",
    "client_secret": "secret_xyz789"
  }'

身体

{
  "appid": "com.com2us.hivesdk.normal.freefull.apple.global.ios.universal",
  "grant_type": "client_credentials",
  "client_id": "project_abc123",
  "client_secret": "secret_xyz789"
}


响应体

字段名称 描述 类型
result_code 响应代码, 0=成功 Integer
result_msg 结果留言 String
data 响应数据 Object
data.access_token JWT 访问令牌 String

响应代码

代码值 描述
0 成功
4000 参数无效(缺少必需参数或格式无效)
4001 客户端身份验证失败(client_id 或 client_secret 不匹配)
4002 不支持的 grant_type
4003 身份验证失败(无权限)
5000 内部服务器错误


响应示例

{
  "result_code": 0,
  "result_msg": "SUCCESS",
  "data": {
    "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InByb2plY3RfYWJjMTIzIn0.eyJwcm9qZWN0X2lkIjoiY29tLmNvbTJ1cy5leGFtcGxlIiwidG9rZW5fdHlwZSI6ImFjY2Vzc190b2tlbiIsImdyYW50X3R5cGUiOiJwcm9qZWN0IiwiaWF0IjoxNzE1NTg0MDAwLCJleHAiOjE3MTU1ODc2MDAsImF1dGhfdmVyIjoidjQiLCJ1c2VyX2lkIjoiIiwiaXNfd2hpdGVsaXN0Ijp0cnVlfQ.signature"
  }
}

错误响应示例

{
  "result_code": 4001,
  "result_msg": "INVALID_CLIENT",
  "data": null
}


如何使用代币

调用 Hive Server API 时,将颁发的访问令牌包含在 HTTP 标头中。

JWT 令牌结构

签发的Access Token采用JWT(JSON Web Token)格式,由三部分组成,以句点(.)分隔:Header、Payload和Signature。

标题

领域 价值 描述
孩子 客户ID 客户端标识符(用于 JWT 验证)
藻类 RS256 签名算法(RSA SHA-256)
典型 智威汤逊 代币类型
#### 有效负载
领域 描述
--- ---
grant_type 项目(client_credentials 方法)
经验 过期时间(发出后1小时)
iat 发布时间
token_type 访问令牌
Tip

服务器使用公钥验证 JWT 签名。标头中的 kid 字段标识它是哪个客户端的令牌。

标题设置

标题名称 价值 描述
X-Access-Token JWT 访问令牌 已颁发 OAuth 访问令牌
### 使用示例
curl -X POST https://auth.qpyou.cn/v2/game/player/get-idp \
  -H "Content-Type: application/json" \
  -H "X-Access-Token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InByb2plY3RfYWJjMTIzIn0..." \
  -H "ISCRYPT: 0" \
  -d '{
    "appid": "com.com2us.hivesdk.normal.freefull.apple.global.ios.universal",
    "player_id": 123456789
  }'
Note

调用 Hive Server API 时,请将颁发的 JWT 访问令牌包含在 X-Access-Token 标头中。如果令牌丢失或过期,则会发生身份验证错误。


JWT 令牌验证错误

当 Hive Server API 中的 JWT 令牌验证失败时,将通过 token_validation 字段提供详细的错误信息。

token_validation 字段

该字段包含JWT验证错误信息: | 字段名称 | 描述 | 类型 | | --- | --- | --- | | token_validation | JWT 验证详细信息 | Object | | token_validation.result_code | JWT验证结果代码详情 | Integer | | token_validation.result_msg | JWT 验证结果消息 | String | ???+ note- JWT 验证成功时:token_validation.result_code: 0 - JWT验证失败时:在token_validation.result_code中返回详细的错误代码 - 该字段通常由 Hive Server API 使用。

错误响应示例

没有客户信息

"token_validation": {
  "result_code": 2400,
  "result_msg": "No client information found."
}

缺少令牌

"token_validation": {
  "result_code": 2406,
  "result_msg": "The access token is missing."
}

令牌签名错误

"token_validation": {
  "result_code": 2407,
  "result_msg": "Invalid token signature."
}

过期令牌

"token_validation": {
  "result_code": 2408,
  "result_msg": "The access token is expired. Please refresh your token."
}

JWT 验证错误代码

代码值 描述 分辨率
2400 暂无客户信息 JWT 标头中的 kid 无效。检查客户端 ID。
2405 令牌格式错误 JWT 格式无效。重新发行令牌。
2406 缺少令牌 X-Access-Token 标头丢失。发出令牌并将其包含在标头中。
2407 令牌签名错误 JWT 签名验证失败。确保您使用正确的令牌。
2408 过期令牌 访问令牌已过期(1 小时)。重新发行新的代币。
2409 令牌尚未生效 JWT 早于其 nbf(不早于)时间。检查系统时间。
2410 授权类型不匹配 请求的 grant_type 与 JWT 中的 grant_type 不同。
2411 用户 ID 不匹配 请求的player_id与JWT中的user_id不同(使用用户令牌时)。
2412 授权类型不匹配 JWT 中的 grant_type 不是“user”。使用游戏客户端登录成功后返回的User Token。
### 正常响应
当 JWT 验证成功时:
"token_validation": {
  "result_code": 0,
  "result_msg": "success"
}
Note

Hive Server API 在每个响应中都包含 token_validation 字段,无论成功还是失败。


令牌更新

刷新令牌不是在客户端凭证授予中颁发的。

处理令牌过期

  1. Access Token过期(发出后1小时) 2.调用API时JWT验证失败(token_validation.result_code: 2408) 3、调用/oauth/token接口重新签发新的Access Token
Note

当访问令牌过期时,您必须使用相同的客户端 ID 和客户端密钥重新颁发新令牌。由于没有提供刷新令牌,因此请按照与初始发行相同的方式重新发行令牌。

推荐的代币重用

访问令牌可以重复使用,直到过期。 建议: - 推荐:缓存已发放的token并重复使用直至过期 - 不推荐:为每个 API 调用发出新的令牌

Tip

仅在游戏服务器启动或令牌过期时重新颁发令牌来优化性能。不必要的令牌发行会增加服务器负载。


安全建议

客户端机密管理

客户端密钥是敏感信息,必须安全管理。 | 项目 | 描述 | | --- | --- | | 切勿暴露 |切勿将客户端密钥暴露给客户端(应用程序/网络) | | 仅限服务器 |仅在游戏服务器上使用它(服务器到服务器通信)| | 安全存储 |将其存储在环境变量或安全存储(Vault)中 |

Warning

如果客户端密钥被泄露,攻击者就可以冒充游戏服务器并访问所有玩家信息。

需要 HTTPS

颁发 OAuth Token 和调用 API 时必须使用 HTTPS。 - 推荐:https://auth.qpyou.cn/oauth/token - 禁止:使用http://(容易受到中间人攻击)