跳轉至

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://(容易受到中間人攻擊)