로그인 검증 및 유저 정보 조회
로그인 검증 및 유저 정보 조회 는 로그인 페이지 호출하기에서 리다이렉트된 임시 인증 코드(state)를 사용해 로그인 정보를 검증하고, 유저 정보를 반환하는 API입니다. 유저 정보 반환 시, 액세스 토큰과 리프레시 토큰을 포함합니다.
로그인 검증 및 유저 정보 조회 API를 요청하여 반환되는 값은 크게 아래와 같습니다.
- IdP 정보
- 유저의 정보
- 액세스/리프레시 토큰
Note
로그인 검증 성공 후 유저 정보 또는 토큰 정보가 필요한 경우는 아래와 같습니다.
- 웹 로그인 검증에 성공하고 PlayerID가 생성된 유저의 경우, 응답에 유저 정보(
user_info)가 포함됩니다. 단,유저 정보가 변경되었거나 별도로 확인이 필요한 경우에는 인증 API로 유저 정보 조회를 호출하여 확인할 수 있습니다. - 액세스/리프레시 토큰이 필요한 경우, 웹 로그인을 다시 수행하거나 토큰 만료 전에 토큰 갱신 API를 통해 갱신해야 합니다.
Request URL
Request Body
| 필드명 | 타입 | 설명 | 필수 여부 |
| grant_type | String | OAuth 2.0 인가 코드 방식 기본값: authorization_code | Y |
| state | String | 로그인 후 전달 받은 임시 인증 코드 (authorization_code) | Y |
| client_id | String | 보안 키 설정에서 생성한 OAuth 2.0 Client ID. Hive 콘솔 앱센터 > 보안 키 설정 에서 확인할 수 있습니다. | Y |
| client_secret | String | 보안 키 설정에서 생성한 OAuth 2.0 Client Secret. Hive 콘솔 앱센터 > 보안 키 설정 에서 확인할 수 있습니다. | Y |
| redirect_uri | String | 리다이렉트 URI 주소입니다. Hive 콘솔 인증 > 인증 환경 설정 > 로그인 설정 에서 설정한 Redirect URI와 일치해야 합니다. | Y |
Request Body Example
{
"grant_type": "authorization_code",
"state": "1627881984263-jkx1B3GOY3EsJ",
"client_id": "58b48cd3-df47-5b52-2627-3f9c8d01",
"client_secret": "bec7760b237244c4c818d6174587d8e1",
"redirect_uri": "https://community.withhive.com/hivesdk/login/redirect"
}
Response Body
| 필드명 | 타입 | 설명 | 비고 |
| code | Integer | 웹 로그인 응답 코드 | |
| appid | String | 앱 아이디 | |
| idp_index | Integer | 로그인 시 사용된 IdP 인덱스 | 1: Hive2: Facebook3: Google9: Apple
|
| idp_user_id | String | 로그인 시 사용된 IdP 고유 식별자 | |
| enc_idp | String | IdP 정보 암호화한 키 | 외부 PC 자동 로그인 토큰 발급 키 |
| user_info | JSON | 유저 정보 | |
| user_info.auth_ver | String | 인증 서버 버전 | |
| user_info.user_id | BigInteger | 인증v4 PlayerID | |
| user_info.user_idp_list | Array | 연동된 IdP 리스트 | 유저가 연동한 IdP 정보를 담은 리스트 |
| user_info.user_idp_list.player_id | BigInteger | 연동된 IdP 리스트 - 인증v4 PlayerID | |
| user_info.user_idp_list.idp_user_id | String | 연동된 IdP 리스트 - IdP 고유 식별자 | |
| user_info.user_idp_list.idp_index | Integer | 연동된 IdP 리스트 - IdP 인덱스 | 1: Hive2: Facebook3: Google9: Apple
|
| user_info.user_idp_list.idp_id | String | 연동된 IdP 리스트 - IdP 아이디 | GUEST는 다른 IdP로 플레이 했어도 기본으로 생성 |
| user_info.is_blocked | Boolean | 이용 정지 여부 | true: 이용 정지 유저false: 정상 유저
|
| user_info.is_refund | Boolean | 환불 유저 재결재 대상 여부 | true: 환불 유저 재결제 대상 유저false: 환불 유저 재결제 미대상 유저
|
| user_info.access_token | String | 액세스 토큰 (JWT) - 비대칭 알고리즘 | - 계정(PlayerID)이 없으면 발급 되지 않음.
- 유효 시간: 1시간
|
| user_info.refresh_token | String | 리프레시 토큰 (JWT) - 비대칭 알고리즘 | - 계정(PlayerID)이 없으면 발급 되지 않음.
- 유효 기간: 30일
|
웹 로그인 응답 코드
| code | 설명 | 비고 |
| 100 | 성공 | |
| 1050 | 유효하지 않은 파라미터 | |
| 1075 | 인증 서버 통신 에러 | |
| 2011 | 프로젝트 정보가 없음 | |
| 2013 | 프로젝트가 종료된 상태 | |
| 2021 | IdP 인증 완료를 하지 않은 유저 이거나, 유저의 토큰 세션이 만료된 경우 | |
| 2023 | 유저의 토큰 정보 비정상 | |
| 7000 | OAuth2.0 보안 키를 생성하지 않음 | Hive 콘솔 앱센터 > 보안 키 설정 에서 확인 |
| 7001 | OAuth2.0 Client ID 값이 없음 | 〃 |
| 7002 | OAuth2.0 Client 정보 불일치 | 〃 |
| 7003 | OAuth2.0 Client 정보 없음 | 〃 |
| 7004 | OAuth2.0 지원하지 않는 토큰 발급 타입 | Request Body의 grant_type 확인 |
| 7005 | OAuth2.0 리다이렉트 URI 불일치 | Request Body의 redirect_uri 확인 |
| 8001 | OAuth2.0 JWT 토큰 생성 실패 | |
Response Body Sample (성공 - 유저 정보 존재)
아래와 같은 조건 만족 시, 반환되는 응답 데이터 예시입니다.
- 웹 로그인이 정상적으로 완료된 경우
- 인증 서버에 PlayerID가 생성되어 있는 경우
{
"code": 100,
"appid": "com.com2us.hivesdk.ios.community.global.normal",
"idp_index": 3,
"idp_user_id": "105213591741718897220",
"enc_idp": "K+A4xduO7kf5OrJ/iDPqL2wrbMQTkNQ+jDz3OCCdGiezVsfW74kV0c/Qn2ipdP/ChFBUXoZkEUP03X26MVHnvgqHo9JG2BUCsRVcrsx+03IPRvpzjXAiY5c0tihk45jMWuPYo7q+j5Rsz8eSTKQo1vE9N85huOJWc8IAJKMqBRlpmiNfj+CgZQ5I7uV2u1nHhiLfwRqpt0vG/dT9mpdQisiKUS2mFIpgPnVSZaVMY7qnTvP+mTU11Yv2DhOq2VEycAic9Ko8UkBnllXEApqarqF5s4jg6bu9DxcnRNtZeaGbh4fZKEptjGuE6qqo3CsC1PN5TnU0Wf5uav07CaazsTpEBvA9SNZefWEeTDP2ePK8qd573vpXy4OQHpTOJkVm1AsN/Ir8Fssj9SKGdYyVuZ282VDAiFLAIlVyK4pAfjJRAve+G9tIm/i4mgQmuAqW",
"user_info": {
"auth_ver": "v4",
"user_id": 20000018552,
"user_idp_list": [
{
"player_id": 20000018552,
"idp_user_id": "105213591741718897220",
"idp_index": 3,
"idp_id": "GOOGLE"
},
{
"player_id": 20000018552,
"idp_user_id": "0",
"idp_index": 0,
"idp_id": "GUEST"
}
],
"is_blocked": false,
"is_refund": false,
"access_token": "eyJraWQiOiIwYThlMThkOS1hNmZiLTM3ZDMtNjkwYy02Zjg1ZTllNCIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJpc193aGl0ZWxpc3QiOmZhbHNlLCJwcm9qZWN0X2lkIjoiY29tLmNvbTJ1cy5oaXZlc2RrIiwiZ3JhbnRfdHlwZSI6InVzZXIiLCJ1c2VyX2lkIjoyMDAwMDAxODU1MiwidG9rZW5fdHlwZSI6ImFjY2Vzc190b2tlbiIsImV4cCI6MTc0NTU2MTk4MywiaWF0IjoxNzQ1NTU4MzgzLCJhdXRoX3ZlciI6InY0In0.e4mCIirRpAni4A1ZEF3FDOFng3Da8hq6IqZmyyRQZsc7W3LfFi_id5TIQSDbvmagmT4GcwHztovpoYZxf8blwqES1lJmEVXsBBJ3qpEOAem0K9aVwY0zmOO3A0Eeh6Y0APABewNCpHiKPCMZwxSsMaUE56FfuYgnbhpsipR638VgyPniRVU-Bzcu0Pi2zo-5yUKbg2FCXex510fvZRxqGZPg8Rfhm-jXqAYuwALLIFf2ZykOWqVRFtczfPXwB6fLQrQvQeBnOYcHHnR1q8Fi-Rk_bQPsAffIemGvaC4vUeyx6Szzt_Gok1BsuF76lYZ5ogCn4lAlZ0SJLrgMM2-DNQ",
"refresh_token": "eyJraWQiOiIwYThlMThkOS1hNmZiLTM3ZDMtNjkwYy02Zjg1ZTllNCIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJpc193aGl0ZWxpc3QiOmZhbHNlLCJwcm9qZWN0X2lkIjoiY29tLmNvbTJ1cy5oaXZlc2RrIiwiZ3JhbnRfdHlwZSI6InVzZXIiLCJ1c2VyX2lkIjoyMDAwMDAxODU1MiwidG9rZW5fdHlwZSI6InJlZnJlc2hfdG9rZW4iLCJleHAiOjE3NDgxNTAzODMsImlhdCI6MTc0NTU1ODM4MywiYXV0aF92ZXIiOiJ2NCJ9.fvXTfRDYhlk21EY-ngAXbQMgYM9f-rFYPBa_GMV3JDz3cy9wwGfPTnF-VO0WkpxzpPdbG1ZX0HAdIkT4kF873ee2d-g6-JeuIEy0SFcTMpdYWXnlOfsuZlFIkzCm0OB_mlnNo_wxXHvjHM_dFDF-SfK2r9_ga8yLOXDfLJeA4XUYGwwsG3XT9x5Vy8RlUcF2aeuf-2bXdLSD2NGssZh18RTayV2CNtGuX0kj-nABVVTzLWUqbwKSrIVXjlS76zxl3SisUW_pz97iM98yLLRdpe_56_VDPzKEqVmn4bCyhhlAT1LEdu_uudlBY7hSUX0cJzcLAtj_4GReuLU9SnvQpw"
}
}
Response Body Sample (성공 - 유저 정보 없음)
아래와 같은 조건 만족 시, 반환되는 응답 데이터 예시입니다.
- 웹 로그인이 정상적으로 완료된 경우
- 인증 서버에 PlayerID가 생성되어 있지 않더라도, 개발사에서는 IdP 식별자(
idp_index, idp_user_id) 값을 개발사의 사용자 계정 식별자로 활용하여 로그인 처리를 할 수 있습니다. 단, 유저 정보 없이 로그인 된 경우에는 PlayerID가 없기 때문에 로그인 유지 (SSO)은 사용할 수 없습니다.
{
"code": 100,
"appid": "com.com2us.hivesdk.ios.community.global.normal",
"idp_index": 3,
"idp_user_id": "105213591741718897220",
"enc_idp": "K+A4xduO7kf5OrJ/iDPqL2wrbMQTkNQ+jDz3OCCdGiezVsfW74kV0c/Qn2ipdP/ChFBUXoZkEUP03X26MVHnvgqHo9JG2BUCsRVcrsx+03IPRvpzjXAiY5c0tihk45jMWuPYo7q+j5Rsz8eSTKQo1vE9N85huOJWc8IAJKMqBRlpmiNfj+CgZQ5I7uV2u1nHhiLfwRqpt0vG/dT9mpdQisiKUS2mFIpgPnVSZaVMY7qnTvP+mTU11Yv2DhOq2VEycAic9Ko8UkBnllXEApqarqF5s4jg6bu9DxcnRNtZeaGbh4fZKEptjGuE6qqo3CsC1PN5TnU0Wf5uav07CaazsTpEBvA9SNZefWEeTDP2ePK8qd573vpXy4OQHpTOJkVm1AsN/Ir8Fssj9SKGdYyVuZ282VDAiFLAIlVyK4pAfjJRAve+G9tIm/i4mgQmuAqW"
}
Response Body Sample (실패)
아래와 같은 조건 만족 시, 반환되는 응답 데이터 예시입니다.
외부 PC 자동 로그인 토큰 발급
- Hive 크로스플레이 런처 실행 시, 자동 로그인을 위해 해당 토큰 값(web_idp_token)을 전달합니다.
- web_idp_token은 일회성 토큰으로, 게임 실행 시마다 신규로 획득 필요합니다.
Note
- Request 전달하는 enc_idp 값은 보안상 외부에 노출되지 않도록 유의하세요.
- API 호출 시 서버 to 서버 적용 필수입니다.
Request URL
Request Body
| 필드명 | 타입 | 설명 | 필수 여부 |
| appid | String | 앱 아이디 | Y |
| enc_idp | String | IdP 정보 암호화한 키 | Y |
Request Body Example
{
"appid": "com.com2us.hivesdk.ios.community.global.normal",
"enc_idp": "K+A4xduO7kf5OrJ/iDPqL2wrbMQTkNQ+jDz3OCCdGiezVsfW74kV0c/Qn2ipdP/ChFBUXoZkEUP03X26MVHnvgqHo9JG2BUCsRVcrsx+03IPRvpzjXAiY5c0tihk45jMWuPYo7q+j5Rsz8eSTKQo1vE9N85huOJWc8IAJKMqBRlpmiNfj+CgZQ5I7uV2u1nHhiLfwRqpt0vG/dT9mpdQisiKUS2mFIpgPnVSZaVMY7qnTvP+mTU11Yv2DhOq2VEycAic9Ko8UkBnllXEApqarqF5s4jg6bu9DxcnRNtZeaGbh4fZKEptjGuE6qqo3CsC1PN5TnU0Wf5uav07CaazsTpEBvA9SNZefWEeTDP2ePK8qd573vpXy4OQHpTOJkVm1AsN/Ir8Fssj9SKGdYyVuZ282VDAiFLAIlVyK4pAfjJRAve+G9tIm/i4mgQmuAqW"
}
Response Body
| 필드명 | 타입 | 설명 | 비고 |
| result_code | Integer | 결과 코드 | |
| result_msg | String | 결과 메시지 | |
| data | JSON | 결과 데이터 | |
| data.web_idp_token | String | 외부 PC 자동 로그인 토큰 | |
Response Body Sample
{
"result_code": 0,
"result_msg": "SUCCESS",
"data": {
"web_idp_token": "c47e61856f04f0a6194ddcbabca70a7f10552d044181386e625676fd07a63aee5d2b162a78a55bad350ed58fb07b79be8fea1c786108307f32b602019f31ac8d"
}
}
결과 코드
| result_code | 설명 |
| 0 | 성공 |
| 4000 | 유효하지 않은 요청 파라미터 |
| 4012 | enc_idp 복호화 오류 |