การออก 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 | |
ร่างกาย¶
{
"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"
}
}
ตัวอย่างการตอบสนองข้อผิดพลาด¶
วิธีใช้โทเค็น¶
รวมโทเค็นการเข้าถึงที่ออกไว้ในส่วนหัว 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 ในส่วนหัวระบุว่าเป็นโทเค็นของไคลเอ็นต์ใด
การตั้งค่าส่วนหัว¶
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": 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 สำเร็จ: | ||
Note
Hive Server API มีฟิลด์ token_validation ในทุกการตอบสนอง โดยไม่คำนึงถึงความสำเร็จหรือความล้มเหลว
การต่ออายุโทเค็น¶
โทเค็นการรีเฟรชไม่ได้ออกใน Client Credentials Grant
การจัดการการหมดอายุของโทเค็น¶
- Access Token จะหมดอายุ (1 ชั่วโมงหลังจากออก)
- การตรวจสอบ JWT ล้มเหลวเมื่อเรียก API (
token_validation.result_code: 2408) - เรียก
/oauth/tokenAPI เพื่อออกโทเค็นการเข้าถึงใหม่อีกครั้ง
Note
เมื่อโทเค็นการเข้าถึงหมดอายุ คุณต้องออกโทเค็นใหม่ใหม่โดยใช้รหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์เดียวกัน เนื่องจากไม่มีการระบุโทเค็นการรีเฟรช ให้ออกโทเค็นใหม่ในลักษณะเดียวกับการออกโทเค็นครั้งแรก
โทเค็นที่แนะนำนำมาใช้ซ้ำ¶
Access Token สามารถใช้ซ้ำได้จนกว่าจะหมดอายุ คำแนะนำ: - แนะนำ: แคชโทเค็นที่ออกและนำมาใช้ซ้ำจนกว่าจะหมดอายุ - ไม่แนะนำ: ออกโทเค็นใหม่สำหรับการเรียก API ทุกครั้ง
Tip
เพิ่มประสิทธิภาพการทำงานโดยการออกโทเค็นใหม่เมื่อเซิร์ฟเวอร์เกมเริ่มทำงานหรือเมื่อโทเค็นหมดอายุเท่านั้น การออกโทเค็นที่ไม่จำเป็นจะเพิ่มภาระของเซิร์ฟเวอร์
คำแนะนำด้านความปลอดภัย¶
การจัดการความลับของลูกค้า¶
ความลับของลูกค้าเป็นข้อมูลที่ละเอียดอ่อนและต้องได้รับการจัดการอย่างปลอดภัย | รายการ | คำอธิบาย | | --- | --- | | ห้ามเปิดเผย | อย่าเปิดเผยความลับของลูกค้ากับลูกค้า (แอป/เว็บ) | | เซิร์ฟเวอร์เท่านั้น | ใช้เฉพาะบนเซิร์ฟเวอร์เกมเท่านั้น (การสื่อสารแบบ Server-to-Server) | | การจัดเก็บที่ปลอดภัย | เก็บไว้ในตัวแปรสภาพแวดล้อมหรือที่เก็บข้อมูลที่ปลอดภัย (Vault) |
Warning
หากความลับของลูกค้าถูกเปิดเผย ผู้โจมตีสามารถปลอมตัวเป็นเซิร์ฟเวอร์เกมและเข้าถึงข้อมูลผู้เล่นทั้งหมดได้
ต้องใช้ HTTPS¶
คุณต้องใช้ HTTPS เมื่อออกโทเค็น OAuth และการเรียก API - แนะนำ: https://auth.qpyou.cn/oauth/token - ต้องห้าม: ใช้ http:// (เสี่ยงต่อการโจมตีแบบแทรกกลาง)