콘텐츠로 이동

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"
  }
}

에러 응답 예시

{
  "result_code": 4001,
  "result_msg": "INVALID_CLIENT",
  "data": null
}


토큰 사용 방법

발급받은 Access Token은 HIVE Server API 호출 시 HTTP 헤더에 포함하여 사용합니다.

JWT 토큰 구조

발급받은 Access Token은 JWT(JSON Web Token) 형식이며, .로 구분된 세 부분(Header.Payload.Signature)으로 구성됩니다.

필드 설명
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": 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 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 검증이 성공한 경우:

"token_validation": {
  "result_code": 0,
  "result_msg": "success"
}
Note

Hive Server API는 성공/실패와 관계없이 모든 응답에 token_validation 필드를 포함합니다.


토큰 갱신

Client Credentials Grant에서는 Refresh Token이 발급되지 않습니다.

토큰 만료 시 처리

  1. Access Token 만료 (발급 후 1시간)
  2. API 호출 시 JWT 검증 실패 (token_validation.result_code: 2408)
  3. /oauth/token API를 호출하여 새로운 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:// 사용 (중간자 공격에 취약)