# 인증

> Authenticate Cloud Code requests.

Cloud Code는 인증된 요청만 수락합니다.

인증을 통해 게임 내 모든 상호 작용에 플레이어의 ID를 사용하여 보안, 일관성, 안전성을 보장할 수 있습니다.

Cloud Code로 인증하려는 경우, 아래와 같은 인증 방법을 사용할 수 있습니다.

| 요청 출처                                | 인증 방법                                                                                                  |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------ |
| 신뢰할 수 없는 클라이언트(플레이어)                 | [Unity Authentication](/authentication.md) 서비스를 사용합니다.                                                 |
| 신뢰할 수 있는 클라이언트(게임 서버, 연동 테스트, 로컬 머신) | [서비스 계정 인증](https://services.docs.unity.com/docs/service-account-auth/)이나 Multiplay Hosting 인증을 사용합니다. |

## 플레이어 인증##authenticate-players

[Unity Authentication](/authentication.md)은 고유 ID를 플레이어에게 할당하며 다양한 인증 방법을 제공합니다.

> **Note:**
>
> **참고**: 모바일과 PC를 비롯한 지원되는 플랫폼에 제공되는 [익명 인증](/authentication/use-anon-sign-in.md)과 [플랫폼별 인증](/authentication/approaches-to-authentication.md) 솔루션에 Unity Authentication을 사용할 수 있습니다.

Unity Authentication은 [JWT](https://jwt.io/introduction)(JSON 웹 토큰)를 통한 bearer 인증을 사용합니다. Cloud Code 모듈은 `AccessToken` 프로퍼티가 포함된 `IExecutionContext` 인터페이스를 제공합니다. 이 액세스 토큰은 모듈을 호출하는 플레이어를 인증하는 데 사용하는 [JWT](https://jwt.io/introduction)입니다.

모듈에 `AccessToken`을 사용하는 방법에 대한 자세한 내용은 [액세스 토큰 지원](./token-support.md#access-token-support) 기술 자료를 참고하십시오.

### 액세스 제한##restrict-access

특정 모듈 엔드포인트에 대한 액세스를 제한하려는 경우 RBAC(역할 기반 액세스 제어) 규칙을 사용할 수 있습니다.

이 규칙을 통해 플레이어가 특수 모듈 엔드포인트(플레이어에게 추가 리소스를 제공하는 일회성 지원 함수 등)를 실행하지 못하도록 제한할 수 있습니다. 자세한 내용은 [액세스 제어](./access-control.md) 기술 자료를 참고하십시오.

> **Note:**
>
> **참고**: 보안상의 이유로 Unity Authentication 서비스에서 [Cloud Code 클라이언트 API](https://services.docs.unity.com/cloud-code/v1/index.html#tag/cloud-code)로 생성하는 JWT만 사용할 수 있습니다. [Cloud Code 관리자 API](https://services.docs.unity.com/cloud-code-admin/v1/#tag/cloud-code-modules)로 호출하는 경우 Cloud Code 서비스는 이러한 호출을 거부합니다.

## 신뢰할 수 있는 클라이언트 인증##authenticate-trusted-clients

[서비스 계정 인증](https://services.docs.unity.com/docs/service-account-auth/)에는 Cloud Code의 클라이언트 API와 관리자 API를 둘 다 사용할 수 있습니다.

다음과 같이 다양한 방법으로 Cloud Code를 사용할 수 있습니다.

* 로컬 머신에서 모듈을 작성합니다.
* CI/CD 파이프라인에서 모듈을 작성하고 실행합니다.
* 게임 서버에서 모듈을 실행합니다.
* 연동 테스트에서 모듈을 실행합니다.

bearer(JWT) 인증과 기본 인증에 모두 서비스 계정을 사용할 수 있습니다.

### Cloud Code 관리자 API(기본 인증)##cloud-code-admin-api-basic-authentication

[Cloud Code 관리자 API](https://services.docs.unity.com/cloud-code-admin/v1/#tag/cloud-code-modules)에 액세스하려면 [기본 인증](https://services.docs.unity.com/docs/service-account-auth/#authenticate-an-api-using-service-account-credentials)을 사용해야 합니다.

서비스 계정 자격 증명을 바로 사용하려면 `<KEY_ID>:<SECRET_KEY>`를 base64로 인코딩해야 합니다. 또한 서비스 계정에 적절한 권한을 부여해야 합니다. Cloud Code의 권한과 역할에 대한 자세한 내용은 아래 표를 참고하십시오.

| 액세스 권한      | 역할                                                                                             |
| ----------- | ---------------------------------------------------------------------------------------------- |
| 모듈 읽기       | [Cloud Code 조회자](https://services.docs.unity.com/docs/service-account-auth/#cloud-code-viewer) |
| 모듈 읽기/쓰기/삭제 | [Cloud Code 편집자](https://services.docs.unity.com/docs/service-account-auth/#cloud-code-editor) |

자세한 내용은 [서비스 계정 인증](https://services.docs.unity.com/docs/service-account-auth/) 기술 자료를 참고하십시오.

### Cloud Code 클라이언트 API(bearer 인증)##cloud-code-client-api-bearer-authentication

[Cloud Code 클라이언트 API](https://services.docs.unity.com/cloud-code/v1/index.html#tag/cloud-code)에 액세스하려면 bearer 인증을 사용합니다. [토큰 교환 API](https://services.docs.unity.com/auth/v1/#tag/authentication/operation/exchangetostateless)를 사용하여 수명 제한이 있는 상태 비보존 토큰을 획득할 수 있습니다.

> **Note:**
>
> **참고**: 환경 ID에 대한 쿼리 파라미터는 선택 사항이라고 토큰 교환 API에 명시되어 있지만, Cloud Code 클라이언트 API에 액세스하여 모듈을 실행하려면 환경 ID를 제공해야 합니다.

토큰이 만료된 경우 동일한 API를 사용하여 [토큰을 새로 고칠](https://services.docs.unity.com/docs/service-account-auth/#refresh-your-stateless-token) 수 있습니다.

Cloud Code 모듈은 `ServiceToken` 프로퍼티가 포함된 `IExecutionContext` 오브젝트를 제공합니다. `ServiceToken` 프로퍼티는 Cloud Code로 인증하여 크로스 플레이어 데이터에 액세스하는 데 사용할 수 있는 [JWT](https://jwt.io/introduction)입니다. 예를 들어, 이 토큰을 사용하면 다른 플레이어를 대신해 Cloud Save를 호출하여 데이터를 저장할 수 있습니다.

모듈에 `ServiceToken`을 사용하는 방법에 대한 자세한 내용은 [서비스 토큰 지원](./token-support.md#service-token-support) 기술 자료를 참고하십시오.

> **Note:**
>
> **참고**: 클라이언트 API를 호출하는 데만 토큰 교환 API를 사용할 수 있습니다. 요청에 범위를 지정할 필요는 없습니다.

## Multiplay Hosting으로 인증##authenticate-with-multiplay-hosting

Multiplay Hosting은 서버에서 생성된 JWT를 사용하는 추가 인증 방법을 지원합니다. 자세한 내용은 [Unity 게임 서버(Multiplay Hosting)에서 호출](./run-modules/game-server.md)하는 방법에 대한 기술 자료를 참고하십시오.
