OAuth トークン発行¶
Hive サーバー API を呼び出す際の認可検証と安全な認証に必要な OAuth トークンを発行します。 「OAuth トークンの発行」API は、OAuth 2.0 クライアント資格情報付与標準に従い、アプリサーバーが Hive 認証サーバーを直接呼び出すサーバー間認証フローとして動作します。 「OAuthトークン発行」APIには以下の特徴があります。 - クライアントIDとシークレットのみを使用してトークンを発行します ・アクセストークンのみ発行(リフレッシュトークンは発行されません) - 1時間(3600秒)有効
Note
クライアント ID とクライアント シークレットの発行については、セキュリティキー設定 を参照してください。
リクエスト URL¶
| 本番URL | https://auth.qpyou.cn/oauth/token |
|---|---|
| サンドボックス URL | 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 | クライアント シークレット (App Center で発行) |
| ## リクエストの例 | |
| ### 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 サーバー API を呼び出すときに、発行されたアクセス トークンを HTTP ヘッダーに含めます。
JWT トークン構造¶
発行されるアクセス トークンは JWT (JSON Web Token) 形式であり、ピリオド (.) で区切られたヘッダー、ペイロード、署名の 3 つの部分で構成されます。
ヘッダー¶
| フィールド | 値 | 説明 |
|---|---|---|
| 子供 | クライアントID | クライアント識別子 (JWT 検証に使用) |
| アルゴリズム | RS256 | 署名アルゴリズム (RSA SHA-256) |
| タイプ | JWT | トークンの種類 |
| #### ペイロード | ||
| フィールド | 説明 | |
| --- | --- | |
| grant_type | プロジェクト (client_credentials メソッド) | |
| 経験 | 有効期限 (発行後 1 時間) | |
| イアット | 発行時間 | |
| token_type | アクセストークン |
Tip
サーバーは公開キーを使用して JWT 署名を検証します。ヘッダーの kid フィールドは、どのクライアントのトークンであるかを識別します。
ヘッダー設定¶
Note
Hive サーバー API を呼び出すときは、発行された JWT アクセス トークンを X-Access-Token ヘッダーに含めます。トークンが見つからないか期限切れの場合、認証エラーが発生します。
JWT トークン検証エラー¶
Hive サーバー 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 サーバー 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 (Not Before) 時間より前です。システム時間を確認してください。 |
| 2410 | 付与タイプの不一致 | 要求されたgrant_typeは、JWTのgrant_typeとは異なります。 |
| 2411 | ユーザー ID の不一致 | 要求された player_id は、JWT の user_id と異なります (ユーザー トークンを使用する場合)。 |
| 2412 | 付与タイプの不一致 | JWT の Grant_type は「user」ではありません。ゲーム クライアントのログインが成功した後に返されたユーザー トークンを使用します。 |
| ### 通常の応答 | ||
| JWT 検証が成功した場合: | ||
Note
Hive サーバー API には、成功または失敗に関係なく、すべての応答に token_validation フィールドが含まれます。
トークンの更新¶
リフレッシュ トークンは、クライアント クレデンシャル付与では発行されません。
トークンの有効期限の処理¶
- アクセス トークンの有効期限が切れます (発行後 1 時間)。
- API の呼び出し時に JWT 検証が失敗する (
token_validation.result_code: 2408) /oauth/tokenAPI を呼び出して、新しいアクセス トークンを再発行します。
Note
アクセス トークンの有効期限が切れたら、同じクライアント ID とクライアント シークレットを使用して新しいトークンを再発行する必要があります。リフレッシュトークンは提供されないため、初回発行と同様にトークンを再発行してください。
推奨されるトークンの再利用¶
アクセス トークンは、有効期限が切れるまで再利用できます。 推奨事項: - 推奨: 発行されたトークンをキャッシュし、有効期限が切れるまで再利用します。 - 非推奨: API 呼び出しごとに新しいトークンを発行する
Tip
ゲームサーバーの起動時またはトークンの有効期限が切れたときにのみトークンを再発行することで、パフォーマンスを最適化します。不要なトークンの発行はサーバーの負荷を増加させます。
セキュリティに関する推奨事項¶
クライアント シークレットの管理¶
クライアント シークレットは機密情報であるため、安全に管理する必要があります。 | アイテム | 説明 | | --- | --- | | 決して公開しないでください |クライアント シークレットをクライアント (アプリ/ウェブ) に決して公開しないでください。 | | サーバーのみ |ゲームサーバー上でのみ使用します(サーバー間通信) | | 安全なストレージ |環境変数または安全なストレージ (Vault) に保存します。 |
Warning
クライアント シークレットが公開されると、攻撃者がゲーム サーバーになりすましてすべてのプレイヤー情報にアクセスできるようになります。
HTTPSが必要です¶
OAuth トークンを発行して API を呼び出すときは、HTTPS を使用する必要があります。 - 推奨: https://auth.qpyou.cn/oauth/token - 禁止: http:// の使用 (中間者攻撃に対して脆弱)