NHN AppGuard Public API를 사용하려면 문의하기에서 권한을 요청해야 합니다.
[API 도메인]
| 리전 | 도메인 |
|---|---|
| 모든 리전 | https://appguard.api.nhncloudservice.com |
NHN AppGuard Public API를 사용하려면 User Access Key가 필요합니다. User Access Key는 NHN Cloud 계정 또는 IAM 계정을 기반으로 발급되는 인증 키로, Secret Access Key와 함께 사용하여 API 요청에 대한 인증 수단으로 활용됩니다. User Access Key와 Secret Access Key는 콘솔의 API 보안 설정에서 발급할 수 있습니다. User Access Key 발급 및 사용에 대한 자세한 내용은 User Access Key를 참고하세요.
주의
API 호출에 연동된 User Access Key ID/Secret Access Key를 가진 멤버가 탈퇴하면 서비스 장애가 발생할 수 있습니다. 탈퇴 전에 유효한 멤버의 키로 교체해야 합니다.
유저/디바이스별 이상 행위 탐지 현황을 조회합니다. 당일 데이터는 조회할 수 없습니다.
이 API는 요청 본문을 요구하지 않습니다.
[URI]
| 메서드 | URI |
|---|---|
| GET | /v1.0/appkeys/{appkey}/dashboard/abnormal-status |
[헤더]
| 이름 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
| X-TC-AUTHENTICATION-ID | String | 필수 | NHN Cloud 콘솔에서 발급한 User Access Key |
| X-TC-AUTHENTICATION-SECRET | String | 필수 | NHN Cloud 콘솔에서 발급한 Secret Access Key |
[파라미터]
| 이름 | 타입 | 필수 여부 | 기본값 | 유효 범위 | 설명 |
|---|---|---|---|---|---|
| targetType | Integer | 선택 | 0 | 0, 1 | 출력할 ID 타입(0=디바이스 ID, 1=유저 ID) |
| targetDate | Date | 필수 | - | (N-90)일 ~ (N-1)일 | 대상 일자(format=YYYY-MM-DD) |
| os | Integer | 필수 | - | 1, 2 | 조회 대상 OS(1=Android, 2=iOS) |
curl -X GET "https://appguard.api.nhncloudservice.com/v1.0/appkeys/{appkey}/dashboard/abnormal-status?targetType=0&targetDate=2024-01-01&os=1" \
-H "Content-Type: application/json" \
-H "X-TC-AUTHENTICATION-ID: {user_access_key}" \
-H "X-TC-AUTHENTICATION-SECRET: {secret_access_key}"
[필드]
| 필드 | 타입 | 설명 |
|---|---|---|
| header | Object | 헤더 영역 |
| header.isSuccessful | Boolean | 성공 여부 |
| header.resultCode | Integer | 결과 코드 |
| header.resultMessage | String | 결과 메시지 |
| data | List | 유저별 이상 행위 탐지 현황 목록 |
| data[0].abnormalId | String | 유저 ID 또는 디바이스 ID(path parameter targetType 값에 따름) |
| data[0].total | Integer | 이상 행위 탐지 총계 |
| data[0].cheatCount | Integer | 치팅 툴 탐지 횟수 |
| data[0].emulatorCount | Integer | 에뮬레이터 탐지 횟수 |
| data[0].modificationCount | Integer | 변조 탐지 횟수 |
| data[0].debuggerCount | Integer | 디버거 탐지 횟수 |
| data[0].rootingCount | Integer | 루팅 탐지 횟수(path parameter os 값에 따름, Android Only) |
| data[0].speedHackCount | Integer | 스피드 조작 탐지 횟수(path parameter os 값에 따름, Android Only) |
| data[0].networkCount | Integer | SSL Pinning 탐지 횟수(path parameter os 값에 따름, Android Only) |
| data[0].virtualCount | Integer | 가상 환경 탐지 횟수(path parameter os 값에 따름, Android Only) |
| data[0].remoteCount | Integer | 원격 제어 탐지 횟수(path parameter os 값에 따름, Android Only) |
| data[0].macroCount | Integer | 매크로 툴 탐지 횟수(path parameter os 값에 따름, Android Only) |
| data[0].blackCount | Integer | 블랙리스트 탐지 횟수(path parameter os 값에 따름, Android Only) |
| data[0].macroSuspectCount | Integer | 매크로 의심 사용자 탐지 횟수(path parameter os 값에 따름, Android Only) |
| data[0].jailbreakCount | Integer | 탈옥 탐지 횟수(path parameter os 값에 따름, iOS Only) |
| data[0].hookCount | Integer | 후킹 탐지 횟수(path parameter os 값에 따름, iOS Only) |
[응답 본문]
{
"header": {
"resultCode": 1,
"resultMessage": "Request success",
"isSuccessful": true
},
"data": [
{
"abnormalId": "id123",
"total": 12,
"cheatCount": 1,
"emulatorCount": 1,
"modificationCount": 1,
"debuggerCount": 1,
"rootingCount": 1,
"speedHackCount": 1,
"networkCount": 1,
"virtualCount": 1,
"remoteCount": 1,
"macroCount": 1,
"blackCount": 1,
"macroSuspectCount": 1
}
]
}
{
"header": {
"resultCode": 1,
"resultMessage": "Request success",
"isSuccessful": true
},
"data": [
{
"abnormalId": "device123",
"total": 6,
"cheatCount": 1,
"emulatorCount": 1,
"modificationCount": 1,
"debuggerCount": 1,
"jailbreakCount": 1,
"hookCount": 1
}
]
}
아래에 명시되지 않은 코드는 API Gateway의 Gateway 오류 코드와 HTTP Response Status Code (RFC9110)를 따릅니다.
| code | message | 설명 | 비고 |
|---|---|---|---|
| 4000001 | INVALID PARAMETER | 잘못된 인자 | |
| 4010001 | INVALID APPKEY | 잘못된 appkey | 인증에 사용한 사용자가 appkey에 포함된 유저인지 확인 |
| 4010007 | Invalid user access key. | 잘못된 user access key | |
| 4010008 | Invalid user access key or secret access key. | 잘못된 user access key 또는 secret access key |
무결성 검증 API를 사용하려면 문의하기에서 권한을 요청해야 합니다.
[API 도메인]
| 리전 | 도메인 |
|---|---|
| 모든 리전 | https://api-integrityguard.nhncloudservice.com |
토큰을 조회합니다. 한 번 조회한 토큰은 사라집니다.
[URL]
| 메서드 | URI |
|---|---|
| GET | /integrity-api/v1.0/client/apps/{appId}/token-info |
[헤더]
| 이름 | 타입 | 필수 | 설명 |
|---|---|---|---|
| Authorization | String | 필수 | Bearer 토큰 |
curl -X GET 'https://api-integrityguard.nhncloudservice.com/integrity-api/v1.0/client/apps/{appId}/token-info' \
-H 'Authorization: Bearer {token}'
[필드]
| 필드 | 타입 | 설명 |
|---|---|---|
| header | Object | 헤더 영역 |
| header.isSuccessful | Boolean | 성공 여부 |
| header.resultCode | Integer | 결과 코드 |
| header.resultMessage | String | 결과 메시지 |
| body | Object | 토큰 정보 |
| body.appId | String | 앱 ID |
| body.expireAt | Long | 만료 시간 (timestamp) |
| body.integrityInfo | Object | 앱 무결성 정보 |
| body.integrityInfo.codeHash | String | 바이너리 해시 |
| body.integrityInfo.signature | String | 서명 |
| body.integrityResult | Object | 무결성 검증 결과 |
| body.integrityResult.codeHashMatch | Boolean | 코드 해시 일치 여부 |
| body.integrityResult.signatureMatch | Boolean | 서명 일치 여부 |
| body.integrityResult.integrityChecked | Object | 무결성 검사 정보 |
| body.integrityResult.integrityChecked.rootingDetected | Boolean | 루팅 탐지 여부 (nullable) |
| body.integrityResult.integrityChecked.emulatorDetected | Boolean | 에뮬레이터 탐지 여부 (nullable) |
| body.integrityResult.integrityChecked.debugDetected | Boolean | 디버그 탐지 여부 (nullable) |
| body.integrityResult.integrityChecked.hookingDetected | Boolean | 후킹 탐지 여부 (nullable) |
| body.integrityResult.integrityChecked.untrustedEnv | Boolean | 신뢰할 수 없는 환경 여부 (nullable) |
{
"header": {
"isSuccessful": true,
"resultCode": 0,
"resultMessage": "SUCCESS"
},
"body": {
"appId": "619ce8dc-69c7-4efd-ac37-c0439c928d23",
"expireAt": 1763097379336,
"integrityInfo": {
"codeHash": "codeHash....",
"signature": "signature...."
},
"integrityResult": {
"codeHashMatch": true,
"signatureMatch": true,
"integrityChecked": {
"rootingDetected": true,
"emulatorDetected": true,
"debugDetected": true,
"hookingDetected": false,
"untrustedEnv": true
}
}
}
}