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 | |
身体¶
{
"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"
}
}
错误响应示例¶
如何使用代币¶
调用 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 字段标识它是哪个客户端的令牌。
标题设置¶
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": 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 验证成功时: | ||
Note
Hive Server API 在每个响应中都包含 token_validation 字段,无论成功还是失败。
令牌更新¶
刷新令牌不是在客户端凭证授予中颁发的。
处理令牌过期¶
- 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://(容易受到中间人攻击)