服务令牌和访问令牌支持
Use Access Tokens and Service Tokens to authenticate requests in Cloud Code scripts.
阅读时间6 分钟最后更新于 1 个月前
在脚本中,
contextaccessTokenserviceToken令牌类型 | 来源 | 数据访问 | 用途 |
|---|---|---|---|
| 由 Authentication 服务生成。 | 仅限经过身份验证的玩家。 | |
| 由 Cloud Code 生成。 | 跨玩家数据访问。 | |
概述
请评估您是要以玩家身份还是以受信任的客户端身份进行身份验证。 脚本contextaccessTokenserviceTokenaccessTokenserviceToken访问令牌支持
访问令牌是 Authentication 服务生成的 JWT。您可以使用访问令牌对玩家进行身份验证。 当经过身份验证的玩家调用 Cloud Code 模块时,他们会将自己的访问令牌作为contextAccessTokenaccessToken支持的服务
要检查哪些服务支持访问令牌,请参阅下表:提供者 | 支持的服务 |
|---|---|
| Cloud Code JavaScript SDK | 所有已接入 Authentication 服务的 Cloud Code JavaScript SDK。 |
| UGS Client API | 所有已接入 Authentication 服务的 UGS 服务。 |
| UGS Admin API | 不支持。改用服务帐户身份验证。 |
将令牌用于 Cloud Code JavaScript SDK
要将accessTokencontext
以下示例将增加调用该脚本的玩家的货币余额。该脚本接受货币 ID 作为参数。
JavaScript
const { CurrenciesApi } = require("@unity-services/economy-2.4");module.exports = async ({ params, context, logger }) => { const { projectId, playerId, accessToken } = context; const { currencyId } = params; // Use the accessToken from the context object to authenticate the call as the player const currencies = new CurrenciesApi({accessToken}); try { const result = await currencies.incrementPlayerCurrencyBalance({ projectId, playerId, currencyId, currencyModifyBalanceRequest: { amount: 10 } }); return result.data; } catch (err) { logger.error("Failed to update currency balance", {"error.message": err.message}, {"currencyId" : currencyId}); throw err; }}
将令牌用于 UGS Client API
要将accessToken
以下示例将获取调用该脚本的玩家的好友列表:
JavaScript
const axios = require("axios-0.21");module.exports = async ({ params, context, logger }) => { const config = { headers: { 'Content-Type': 'application/json', // Pass the accessToken from the context object as a bearer token Authorization: `Bearer ${context.accessToken}` } }; try { const friendsGetUrl = `https://social.services.api.unity.com/v1/relationships?type=FRIEND_REQUEST` var res = await axios.get(friendsGetUrl, config); return res.data; } catch (err) { logger.error("Failed to retrieve Friends", {"error.message": err.message}); throw err; }};
服务令牌支持
服务令牌是 Cloud Code 生成的 JWT。您可以使用服务令牌以 Cloud Code 身份对服务进行身份验证。这是经过令牌交换过程的服务帐户令牌。 您可以将服务令牌用于 Cloud Code JavaScript SDK。要将其用于其他 API,您需要在 Authentication 标头中将其作为持有者令牌传递。 如需了解更多信息,请参阅身份验证文档。支持的服务
如需查看支持服务令牌的服务列表,请参阅下表:提供者 | 支持的服务 |
|---|---|
| Cloud Code JavaScript SDK | |
| UGS Client API | |
| UGS Admin API | 不支持。改用服务帐户身份验证。 |
将令牌用于 Cloud Code JavaScript SDK
要将serviceTokencontextJavaScript
const { CurrenciesApi } = require("@unity-services/economy-2.4");module.exports = async ({ params, context, logger }) => { const { projectId } = context; const { playerId, currencyId } = params; // By default, the Cloud Code JavaScript SDKs use the serviceToken from the context object const currencies = new CurrenciesApi(context); try { const result = await currencies.incrementPlayerCurrencyBalance({ projectId, playerId, currencyId, currencyModifyBalanceRequest: { amount: 10 } }); return result.data; } catch (err) { logger.error("Failed to update currency balance", {"error.message": err.message}, {"currencyId" : currencyId}); throw err; }}
将令牌用于 UGS Client API
要将serviceToken
例如,如果您调用 Cloud Save API,则可以使用
serviceTokenJavaScript
const axios = require("axios-0.21");module.exports = async ({ params, context, logger }) => { const config = { headers: { 'Content-Type': 'application/json', // Authenticate as Cloud Code using the serviceToken from the context object Authorization: `Bearer ${context.serviceToken}` } }; let result; try { const cloudSaveUrl = `https://cloud-save.services.api.unity.com/v1/data/projects/${context.projectId}/players/${params.playerId}/items` const payload = { key : "test", value: "test" }; await axios.post(cloudSaveUrl, payload, config); result = await axios.get(cloudSaveUrl, config); return result.data; } catch (err) { logger.error("Failed to call out to Cloud Save", {"error.message": err.message}); throw err; }};