# 認証

> 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 認証では、JSON Web Token ([JWT](https://jwt.io/introduction)) を使用した Bearer 認証を使用します。Cloud Code モジュールは、`AccessToken` プロパティを含む `IExecutionContext` インターフェースを提供します。このアクセストークンは、モジュールを呼び出すプレイヤーの認証に使用する [JWT](https://jwt.io/introduction) です。

モジュール内で `AccessToken` を使用する方法の詳細については、[アクセストークンのサポート](./token-support.md#access-token-support) ドキュメントを参照してください。

### アクセスの制限##restrict-access

特定のモジュールエンドポイントへのアクセスを制限する場合は、ロールベースのアクセス制御 (RBAC) ルールを使用できます。

これらのルールでは、プレイヤーに追加のリソースを付与する 1 回限りのサポート関数など、特殊なモジュールエンドポイントをプレイヤーが実行できないようにすることができます。詳細については、[アクセス制御](./access-control.md) のドキュメントを参照してください。

> **Note:**
>
> **ノート**: セキュリティのために、Unity Authentication サービスが [Cloud Code Client API](https://services.docs.unity.com/cloud-code/v1/index.html#tag/cloud-code) で生成する JWT のみを使用できます。これらの呼び出しを [Cloud Code Admin API](https://services.docs.unity.com/cloud-code-admin/v1/#tag/cloud-code-modules) に対して行った場合、Cloud Code サービスはこれらを拒否します。

## 信頼されているクライアントの認証##authenticate-trusted-clients

Client Cloud Code API と Admin Cloud Code API はどちらも [サービスアカウント認証](https://services.docs.unity.com/docs/service-account-auth/) とともに使用できます。

これにより、Cloud Code を使用できるさまざまな方法を利用できるようになります。

* ローカルマシンからモジュールを記述します。
* モジュールを記述して CI/CD パイプラインから実行します。
* ゲームサーバーからモジュールを実行します。
* インテグレーションテストでモジュールを実行します。

Bearer (JWT) 認証と Basic 認証の両方にサービスアカウントを使用できます。

### Cloud Code Admin API (Basic 認証)##cloud-code-admin-api-basic-authentication

[Cloud Code Admin API](https://services.docs.unity.com/cloud-code-admin/v1/#tag/cloud-code-modules) にアクセスするには、[Basic 認証](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 Client API (Bearer 認証)##cloud-code-client-api-bearer-authentication

[Cloud Code Client API](https://services.docs.unity.com/cloud-code/v1/index.html#tag/cloud-code) にアクセスするには、Bearer 認証を使用します。[Token Exchange API](https://services.docs.unity.com/auth/v1/#tag/authentication/operation/exchangetostateless) を使用して、制限された生存期間でステートレストークンを取得できます。

> **Note:**
>
> **ノート**: Token Exchange API では、環境 ID のクエリパラメーターが任意であると示されますが、Cloud Code Client API にアクセスしてモジュールを実行するには環境 ID を提供する必要があります。

失効したときに [トークンをリフレッシュ](https://services.docs.unity.com/docs/service-account-auth/#refresh-your-stateless-token) するには、同じ API を使用できます。

Cloud Code モジュールは、`ServiceToken` プロパティを含む `IExecutionContext` オブジェクトを提供します。`ServiceToken` プロパティは、Cloud Code として認証してクロスプレイヤーデータにアクセスするために使用できる [JWT](https://jwt.io/introduction) です。例えば、このトークンを使用して Cloud Save を呼び出して、別のプレイヤーに代わってデータを保存できます。

モジュール内で `ServiceToken` を使用する方法の詳細については、[サービストークンサポート](./token-support.md#service-token-support) ドキュメントを参照してください。

> **Note:**
>
> **ノート**: Token Exchange API のみを使用して、Client API を呼び出すこともできます。リクエスト内でスコープを指定する必要はありません。

## Multiplay Hosting による認証##authenticate-with-multiplay-hosting

Multiplay Hosting は、サーバーが生成した JWT を使用する追加の認証方法をサポートします。詳細については、[Unity ゲームサーバー (Multiplay Hosting) を呼び出す](./run-modules/game-server.md) 方法に関するドキュメントを参照してください。
