# 身份验证

> Authenticate Cloud Code requests with player identities.

Cloud Code 仅接受经过身份验证的请求。

借助于身份验证，您可以使用玩家的身份来确保游戏中每次互动的安全性和一致性。

要向 Cloud Code 进行身份验证，您可以使用以下身份验证方法：

| 请求来源                      | 身份验证方法                                                                                            |
| ------------------------- | ------------------------------------------------------------------------------------------------- |
| 不受信任的客户端（玩家）              | 使用 [Unity Authentication](/authentication.md) 服务。                                                 |
| 受信任的客户端（游戏服务器、集成测试、本地计算机） | 使用[服务帐户身份验证](https://services.docs.unity.com/docs/service-account-auth/)或 Multiplay Hosting 身份验证。 |

## 对玩家进行身份验证##authenticate-players

[Unity Authentication](/authentication.md) 为玩家分配唯一标识符，并提供多种身份验证方法。

> **Note:**
>
> **注意**：Unity Authentication 可用于为支持的平台（包括移动端和 PC 端）提供[匿名身份验证](/authentication/use-anon-sign-in.md)和[特定于平台的身份验证](/authentication/approaches-to-authentication.md)解决方案。

Cloud Code 脚本提供了一个 `context` 对象，其中包含一个 `accessToken` 属性。这个访问令牌便是用于对调用该脚本的玩家进行身份验证的 [JWT](https://jwt.io/introduction)。

如需更多有关如何在脚本中使用 `accessToken` 的信息，请参阅[访问令牌支持](./token-support.md#access-token-support)文档。

### 限制访问##restrict-access

如果要限制对特定脚本的访问，可以使用基于角色的访问控制 (RBAC) 规则。

通过这些规则，可以确保玩家无法运行特殊的脚本，例如向玩家授予额外资源的一次性支持脚本。如需了解更多信息，请参阅[访问控制](./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

对于[服务帐户身份验证](https://services.docs.unity.com/docs/service-account-auth/)，Cloud Code Client API 和 Cloud Code Admin API 均可供使用。

因此，您可以通过多种方式使用 Cloud Code：

* 从本地计算机编写脚本。
* 从 CI/CD 管线编写和运行脚本。
* 从游戏服务器运行脚本。
* 在集成测试中运行脚本。

您可以将服务帐户用于持有者 (JWT) 身份验证和基本身份验证。如需了解更多信息，请查看[服务帐户身份验证](https://services.docs.unity.com/docs/service-account-auth/)文档。

### Cloud Code Admin API（基本身份验证）##cloud-code-admin-api-basic-authentication

要访问 [Cloud Code Admin API](https://services.docs.unity.com/cloud-code-admin/v1/#tag/cloud-code-scripts)，请使用[基本身份验证](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 Viewer（Cloud Code 查看者）](https://services.docs.unity.com/docs/service-account-auth/#cloud-code-viewer)              |
| 读取/写入/删除脚本 | [Cloud Code Editor（Cloud Code 编辑者）](https://services.docs.unity.com/docs/service-account-auth/#cloud-code-editor)              |
| 发布脚本       | [Cloud Code Publisher（Cloud Code 发布者）](https://services.docs.unity.com/docs/service-account-auth/#cloud-code-script-publisher) |

### Cloud Code Client API（持有者身份验证）##cloud-code-client-api-bearer-authentication

要访问 [Cloud Code Client API](https://services.docs.unity.com/cloud-code/v1/index.html#tag/cloud-code)，请使用持有者身份验证和 [Token Exchange API](https://services.docs.unity.com/auth/v1/#tag/authentication/operation/exchangetostateless) 来获取有限生命周期的无状态令牌。

> **Note:**
>
> **注意**：尽管 Token Exchange API 声明环境 ID 的查询参数是可选参数，但您必须提供此 ID 才能访问 Cloud Code Client API 以运行脚本。

要在令牌过期时[刷新令牌](https://services.docs.unity.com/docs/service-account-auth/#refresh-your-stateless-token)，可以使用相同的 API。

Cloud Code 脚本提供了一个 `context` 对象，其中包含一个 `serviceToken` 属性。`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) 进行调用](./run-scripts/game-server.md)。
