> For the complete documentation index, see [llms.txt](https://docs.ggwp.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ggwp.com/kr/ggwp-sdk/authentications.md).

# 인증

GGWP SDK는 두 가지 인증 모드를 지원합니다:

| 인증 모드 | 사용 사례       | 보안 | 환경   |
| ----- | ----------- | -- | ---- |
| 정적 토큰 | 빠른 설정 및 테스트 | 낮음 | 개발   |
| 동적 토큰 | 프로덕션 배포     | 높음 | 프로덕션 |

### 정적 토큰

정적 토큰은 애플리케이션 내의 다양한 작업에 대한 보안 액세스 및 서명을 가능하게 하기 위해 사용되는 암호화 키입니다. 이러한 토큰은 인증 및 데이터 무결성을 위한 직관적인 메커니즘을 제공하여 SDK와 GGWP 서버 간의 안전한 통신을 보장합니다.

이 모드에서는 액세스 및 서명용 두 개의 정적 토큰이 GGWP에서 생성되어 고객에게 직접 공유됩니다.&#x20;

데이터 흐름은 아래와 같이 표시됩니다:

<figure><img src="/files/5651f7b968d38b61f3267f22c9db8a281295cfc7" alt=""><figcaption></figcaption></figure>

**장점**

* 서버 측 작업 불필요
* 설정이 빠름

#### 단점

* 보안성이 낮음
* 토큰이 유출되면 새 빌드를 배포해야 할 수 있습니다(게임에 토큰 배포용 자체 서버가 없는 경우).
* 모든 사용자에 대해 동일한 토큰이 데이터 전송에 사용됩니다

### 동적 토큰

이 모드에서는 액세스 토큰과 리프레시 토큰이 GGWP SDK에 의해 보안 인증 및 세션 관리를 위해 사용됩니다. 액세스 토큰은 보호된 리소스에 접근하기 위한 단기 토큰이며, 리프레시 토큰은 재인증 없이 새 액세스 토큰을 얻기 위해 사용되는 장기 토큰입니다.

이 모드는 Services Server가 authcode-request API를 구축하도록 요구합니다. 이 API는 [토큰 요청을 시작](#auth-code-api) 하여 GGWP 서버로 전송합니다. GGWP SDK는 SDK 초기화 과정에서 이 authcode를 필요로 합니다. 게임 클라이언트는 게임 클라이언트와 Services Server 간의 정보 교환을 위해 설계된 기존 보안 프로토콜을 사용하여 이 authcode 요청을 자체 서비스 서버에 안전하게 호출하는 것이 예상됩니다. 초기화가 완료되면 GGWP SDK는 액세스/리프레시 토큰의 검색 및 관리를 처리합니다.

데이터 흐름은 아래와 같이 표시됩니다:

<figure><img src="/files/c46ad16747aff379d6ff4997a1d19586c0587f3a" alt=""><figcaption></figcaption></figure>

#### ***장점***

* 토큰은 단기간 유효하며 사용자에 묶여 있습니다. 유출 시 피해는 한정적이고 짧은 기간으로 제한됩니다
* 토큰은 일시적으로 안전하게 저장되며 탈취하기 어렵습니다
* 원격으로 취소할 수 있습니다

#### ***단점***

* 이를 작동시키려면 서버 측 작업도 필요합니다

#### Auth Code API

이 단계는 Services Server와 GGWP Server 간에 `x-api-key` 인증을 위한 헤더를 사용하여 수행됩니다. 응답으로 authcode를 받게 됩니다. 이 authcode는 5분 동안만 유효하며 임시 액세스 토큰을 얻기 위해 교환될 수 있습니다.

**매개변수**

`헤더`

* x-api-key: 귀하의 조직 및 대시보드에 해당하는 GGWP API 키.

`본문`: 다음 필드를 포함하는 사전(Dictionary):

* user\_id: 로그인한 플레이어 또는 사용자의 고유 식별자
* scope: 세션에 필요한 권한의 배열입니다. 유효한 값은 `write:voice`, `write:chat`, `write:reports` 및 `write:discord`

```bash
curl --request POST "https://client-api.ggwp.com/auth/v1/authorize" \\
  --header 'x-api-key: <API_KEY>' \\
  --data-raw '{
    "user_id": "사용자의 USER ID",
    "scope": ["write:voice", "write:chat"]
  }'
```

**출력**

* 200 - 성공적인 작업

```json
{
  "code": "00000000-0000-0000-0000-000000000002.1bea101b-12d2-47c4-9407-0fbae3ab7691"
}
```

* 400
  * 잘못된 요청: 요청에 잘못되었거나 형식이 잘못된 데이터가 포함되어 있음을 나타냅니다.
* 403
  * **금지됨**: 서버가 요청을 이해했지만 인가를 거부한다는 것을 나타냅니다.
    * 이는 유효하지 않은 토큰, 불일치하는 user\_id 또는
    * 요금 제한을 초과했을 때 발생할 수 있습니다
* 500
  * **내부 서버 오류**: 서버가 요청을 수행하지 못하게 하는 예기치 않은 조건을 만났음을 나타냅니다.
