ข้ามไปที่เนื้อหา

การออก OAuth token

ออกโทเค็น OAuth ที่จำเป็นสำหรับการตรวจสอบการอนุญาตและการตรวจสอบสิทธิ์ที่ปลอดภัยเมื่อเรียกใช้ Hive Server API API 'ออกโทเค็น OAuth' เป็นไปตามมาตรฐาน OAuth 2.0 Client Credentials Grant และทำงานเป็นขั้นตอนการตรวจสอบสิทธิ์แบบเซิร์ฟเวอร์ถึงเซิร์ฟเวอร์ โดยที่เซิร์ฟเวอร์แอปเรียกใช้เซิร์ฟเวอร์การตรวจสอบสิทธิ์ Hive โดยตรง API 'การออกโทเค็น OAuth' มีลักษณะดังต่อไปนี้ - ออกโทเค็นโดยใช้รหัสลูกค้าและความลับเท่านั้น - ออกเฉพาะโทเค็นการเข้าถึง (ไม่มีการออกโทเค็นการรีเฟรช) - ใช้ได้ 1 ชั่วโมง (3600 วินาที)

Note

หากต้องการออก Client ID และ Client Secret โปรดดูที่ การตั้งค่าคีย์ความปลอดภัย


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 รหัสแอป
grant_type แก้ไขเป็น client_credentials
client_id รหัสลูกค้า (ออกใน App Center)
client_secret รหัสลับไคลเอนต์ (ออกใน App Center)

## ขอตัวอย่าง
### 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
}


วิธีใช้โทเค็น

รวมโทเค็นการเข้าถึงที่ออกไว้ในส่วนหัว HTTP เมื่อเรียกใช้ Hive Server API

โครงสร้างโทเค็น JWT

โทเค็นการเข้าถึงที่ออกให้อยู่ในรูปแบบ JWT (JSON Web Token) และประกอบด้วยสามส่วนที่คั่นด้วยจุด (.): ส่วนหัว เพย์โหลด และลายเซ็น

หัวเรื่อง

สนาม ความคุ้มค่า คำอธิบาย
เด็ก รหัสลูกค้า ตัวระบุไคลเอ็นต์ (ใช้สำหรับการตรวจสอบ JWT)
alg RS256 อัลกอริธึมลายเซ็น (RSA SHA-256)
ประเภท เจดับบลิวที ประเภทโทเค็น
#### เพย์โหลด
สนาม คำอธิบาย
--- ---
grant_type โครงการ (วิธี client_credentials)
ประสบการณ์ เวลาหมดอายุ (1 ชั่วโมงหลังออก)
นั่น เวลาที่ออก
token_type access_token
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 Access Token ที่ออกไว้ในส่วนหัว X-Access-Token หากโทเค็นหายไปหรือหมดอายุ จะเกิดข้อผิดพลาดในการตรวจสอบสิทธิ์


ข้อผิดพลาดในการตรวจสอบโทเค็น JWT

เมื่อการตรวจสอบโทเค็น JWT ล้มเหลวใน Hive Server API ข้อมูลข้อผิดพลาดโดยละเอียดจะถูกระบุผ่านฟิลด์ 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 ไม่มีข้อมูลลูกค้า kid ใน JWT Header ไม่ถูกต้อง ตรวจสอบรหัสลูกค้า
2405 ข้อผิดพลาดรูปแบบโทเค็น รูปแบบ JWT ไม่ถูกต้อง ออกโทเค็นใหม่
2406 โทเค็นหายไป ส่วนหัว X-Access-Token หายไป ออกโทเค็นและรวมไว้ในส่วนหัว
2407 ข้อผิดพลาดลายเซ็นโทเค็น การตรวจสอบลายเซ็น JWT ล้มเหลว ตรวจสอบให้แน่ใจว่าคุณใช้โทเค็นที่ถูกต้อง
2408 โทเค็นหมดอายุ โทเค็นการเข้าถึงหมดอายุแล้ว (1 ชั่วโมง) ออกโทเค็นใหม่อีกครั้ง
2409 โทเค็นยังไม่ถูกต้อง JWT อยู่ก่อนเวลา nbf (ไม่ใช่ก่อน) ตรวจสอบเวลาของระบบ
2410 ประเภทสิทธิ์ไม่ตรงกัน grant_type ที่ร้องขอนั้นแตกต่างจาก grant_type ใน JWT
2411 ID ผู้ใช้ไม่ตรงกัน player_id ที่ร้องขอนั้นแตกต่างจาก user_id ใน JWT (เมื่อใช้โทเค็นผู้ใช้)
2412 ประเภทสิทธิ์ไม่ตรงกัน grant_type ใน JWT ไม่ใช่ 'ผู้ใช้' ใช้โทเค็นผู้ใช้ที่ส่งคืนหลังจากล็อกอินไคลเอนต์เกมสำเร็จ
### การตอบสนองปกติ
เมื่อการตรวจสอบ JWT สำเร็จ:
"token_validation": {
  "result_code": 0,
  "result_msg": "success"
}
Note

Hive Server API มีฟิลด์ token_validation ในทุกการตอบสนอง โดยไม่คำนึงถึงความสำเร็จหรือความล้มเหลว


การต่ออายุโทเค็น

โทเค็นการรีเฟรชไม่ได้ออกใน Client Credentials Grant

การจัดการการหมดอายุของโทเค็น

  1. Access Token จะหมดอายุ (1 ชั่วโมงหลังจากออก)
  2. การตรวจสอบ JWT ล้มเหลวเมื่อเรียก API (token_validation.result_code: 2408)
  3. เรียก /oauth/token API เพื่อออกโทเค็นการเข้าถึงใหม่อีกครั้ง
Note

เมื่อโทเค็นการเข้าถึงหมดอายุ คุณต้องออกโทเค็นใหม่ใหม่โดยใช้รหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์เดียวกัน เนื่องจากไม่มีการระบุโทเค็นการรีเฟรช ให้ออกโทเค็นใหม่ในลักษณะเดียวกับการออกโทเค็นครั้งแรก

โทเค็นที่แนะนำนำมาใช้ซ้ำ

Access Token สามารถใช้ซ้ำได้จนกว่าจะหมดอายุ คำแนะนำ: - แนะนำ: แคชโทเค็นที่ออกและนำมาใช้ซ้ำจนกว่าจะหมดอายุ - ไม่แนะนำ: ออกโทเค็นใหม่สำหรับการเรียก API ทุกครั้ง

Tip

เพิ่มประสิทธิภาพการทำงานโดยการออกโทเค็นใหม่เมื่อเซิร์ฟเวอร์เกมเริ่มทำงานหรือเมื่อโทเค็นหมดอายุเท่านั้น การออกโทเค็นที่ไม่จำเป็นจะเพิ่มภาระของเซิร์ฟเวอร์


คำแนะนำด้านความปลอดภัย

การจัดการความลับของลูกค้า

ความลับของลูกค้าเป็นข้อมูลที่ละเอียดอ่อนและต้องได้รับการจัดการอย่างปลอดภัย | รายการ | คำอธิบาย | | --- | --- | | ห้ามเปิดเผย | อย่าเปิดเผยความลับของลูกค้ากับลูกค้า (แอป/เว็บ) | | เซิร์ฟเวอร์เท่านั้น | ใช้เฉพาะบนเซิร์ฟเวอร์เกมเท่านั้น (การสื่อสารแบบ Server-to-Server) | | การจัดเก็บที่ปลอดภัย | เก็บไว้ในตัวแปรสภาพแวดล้อมหรือที่เก็บข้อมูลที่ปลอดภัย (Vault) |

Warning

หากความลับของลูกค้าถูกเปิดเผย ผู้โจมตีสามารถปลอมตัวเป็นเซิร์ฟเวอร์เกมและเข้าถึงข้อมูลผู้เล่นทั้งหมดได้

ต้องใช้ HTTPS

คุณต้องใช้ HTTPS เมื่อออกโทเค็น OAuth และการเรียก API - แนะนำ: https://auth.qpyou.cn/oauth/token - ต้องห้าม: ใช้ http:// (เสี่ยงต่อการโจมตีแบบแทรกกลาง)