OAuth Token 발급¶
Hive Server API 호출 시 권한 검증 및 보안 인증에 필요한 OAuth Token을 발급 받습니다.
'OAuth Token 발급' API는 OAuth 2.0 표준 사양인 Client Credentials Grant 방식을 따르며, 앱 서버에서 Hive 인증 서버로 직접 호출하는 서버 간(Server-to-Server) 인증 흐름으로 동작합니다.
'OAuth Token 발급' API는 아래와 같은 특징을 갖습니다.
- Client ID와 Secret만으로 토큰 발급
- Access Token만 발급 (Refresh Token 미발급)
- 1시간 유효기간 (3600초)
Note
Client ID와 Client Secret 발급은 보안키 설정을 참조하세요.
Request URL¶
| 상용 URL | https://auth.qpyou.cn/oauth/token |
|---|---|
| Sandbox URL | https://sandbox-auth.qpyou.cn/oauth/token |
| HTTP Method | Post |
| Content-Type | application/json |
| Data Format | JSON |
Request header¶
| 필드명 | 설명 | 타입 | 필수여부 |
|---|---|---|---|
| ISCRYPT | 데이터 암호화 여부 (0= 암호화 안 함) (무조건 0으로 전달) | Integer | Y |
Request body¶
| 필드명 | 설명 | 타입 | 필수여부 |
|---|---|---|---|
| appid | App ID | String | Y |
| grant_type | client_credentials 고정 | String | Y |
| client_id | 클라이언트 ID (앱 센터에서 발급) | String | Y |
| client_secret | 클라이언트 Secret (앱 센터에서 발급) | String | Y |
Request example¶
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"
}'
Body¶
{
"appid": "com.com2us.hivesdk.normal.freefull.apple.global.ios.universal",
"grant_type": "client_credentials",
"client_id": "project_abc123",
"client_secret": "secret_xyz789"
}
Response Body¶
| 필드명 | 설명 | 타입 |
|---|---|---|
| result_code | 응답 코드, 0=성공 | Integer |
| result_msg | 결과 메시지 | String |
| data | 응답 데이터 | Object |
| data.access_token | JWT Access Token | String |
응답 코드¶
| 코드값 | 설명 |
|---|---|
| 0 | 성공 |
| 4000 | 유효하지 않은 파라미터 (필수 파라미터 누락 또는 잘못된 형식) |
| 4001 | 클라이언트 인증 실패 (client_id 또는 client_secret 불일치) |
| 4002 | 지원하지 않는 grant_type |
| 4003 | 인증 실패 (권한 없음) |
| 5000 | 서버 내부 오류 |
Response example¶
{
"result_code": 0,
"result_msg": "SUCCESS",
"data": {
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InByb2plY3RfYWJjMTIzIn0.eyJwcm9qZWN0X2lkIjoiY29tLmNvbTJ1cy5leGFtcGxlIiwidG9rZW5fdHlwZSI6ImFjY2Vzc190b2tlbiIsImdyYW50X3R5cGUiOiJwcm9qZWN0IiwiaWF0IjoxNzE1NTg0MDAwLCJleHAiOjE3MTU1ODc2MDAsImF1dGhfdmVyIjoidjQiLCJ1c2VyX2lkIjoiIiwiaXNfd2hpdGVsaXN0Ijp0cnVlfQ.signature"
}
}
에러 응답 예시¶
토큰 사용 방법¶
발급받은 Access Token은 HIVE Server API 호출 시 HTTP 헤더에 포함하여 사용합니다.
JWT 토큰 구조¶
발급받은 Access Token은 JWT(JSON Web Token) 형식이며, .로 구분된 세 부분(Header.Payload.Signature)으로 구성됩니다.
Header¶
| 필드 | 값 | 설명 |
|---|---|---|
| kid | Client ID | 클라이언트 식별자 (JWT 검증 시 사용) |
| alg | RS256 | 서명 알고리즘 (RSA SHA-256) |
| typ | JWT | 토큰 타입 |
Payload¶
| 필드 | 설명 |
|---|---|
| grant_type | project (client_credentials 방식) |
| exp | 만료 시간 (발급 후 1시간) |
| iat | 발급 시간 |
| token_type | access_token |
Tip
JWT는 서버에서 공개키(Public Key)로 서명을 검증합니다. Header의 kid 필드를 통해 어떤 클라이언트의 토큰인지 식별합니다.
헤더 설정¶
| 헤더명 | 값 | 설명 |
|---|---|---|
| X-Access-Token | JWT Access Token | 발급받은 OAuth Access Token |
사용 예시¶
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 호출 시 X-Access-Token 헤더에 발급받은 JWT 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 Header의 kid가 유효하지 않음. Client ID 확인 필요 |
| 2401 | 토큰 형식 오류 | JWT 형식이 올바르지 않음. 토큰 재발급 필요 |
| 2406 | 토큰 누락 | X-Access-Token 헤더가 누락됨. 토큰 발급 후 헤더에 포함 필요 |
| 2407 | 토큰 서명 오류 | JWT 서명 검증 실패. 올바른 토큰 사용 확인 |
| 2408 | 토큰 만료 | Access Token 만료 (1시간). 새로운 토큰 재발급 필요 |
| 2409 | 토큰 아직 유효하지 않음 | JWT의 nbf(Not Before) 시간 이전. 시스템 시간 확인 |
| 2410 | Grant Type 불일치 | 요청된 grant_type과 JWT의 grant_type이 다름 |
| 2411 | User ID 불일치 | 요청 player_id와 JWT의 user_id가 다름 (user token 사용 시) |
정상 응답¶
JWT 검증이 성공한 경우:
Note
Hive Server API는 성공/실패와 관계없이 모든 응답에 token_validation 필드를 포함합니다.
토큰 갱신¶
Client Credentials Grant에서는 Refresh Token이 발급되지 않습니다.
토큰 만료 시 처리¶
- Access Token 만료 (발급 후 1시간)
- API 호출 시 JWT 검증 실패 (
token_validation.result_code: 2408) /oauth/tokenAPI를 호출하여 새로운 Access Token 재발급
Note
Access Token이 만료되면 동일한 Client ID와 Client Secret을 사용하여 새로운 토큰을 재발급받아야 합니다. Refresh Token이 제공되지 않으므로 최초 발급과 동일한 방법으로 재발급받습니다.
토큰 재사용 권장¶
Access Token은 만료 전까지 재사용할 수 있습니다.
권장 사항:
- ✅ 권장: 발급받은 토큰을 캐싱하여 만료 전까지 재사용
- ❌ 비권장: API 호출마다 새 토큰 발급
Tip
게임 서버 시작 시 또는 토큰 만료 시에만 재발급받아 성능을 최적화하세요. 불필요한 토큰 발급은 서버 부하를 증가시킵니다.
보안 권장사항¶
Client Secret 관리¶
Client Secret은 민감한 정보이므로 안전하게 관리해야 합니다.
| 항목 | 설명 |
|---|---|
| ⚠️ 절대 노출 금지 | Client Secret을 클라이언트(앱/웹)에 절대 노출하지 마세요 |
| 서버 전용 | 반드시 게임 서버에서만 사용 (서버 간 통신) |
| 안전한 보관 | 환경변수 또는 보안 저장소(Vault)에 보관 |
Warning
Client Secret이 노출되면 공격자가 게임 서버를 사칭하여 모든 플레이어 정보에 접근할 수 있습니다.
HTTPS 필수¶
OAuth Token 발급 및 API 호출 시 반드시 HTTPS를 사용해야 합니다.
- ✅ 권장:
https://auth.qpyou.cn/oauth/token - ❌ 금지:
http://사용 (중간자 공격에 취약)