Entra ID 身份验证是开发者密钥的替代方案,用于 Admin、Server 和某些实体 API 调用。面向玩家的 Client 和实体 API 继续使用通过玩家登录获得的会话票据和实体令牌。只有可以使用 title 实体令牌调用的实体 API 才能与 Entra ID 一起使用。有关密钥的更多信息,请参阅密钥管理。
为何使用 Entra ID 身份验证
开发者密钥使用简单,但 Entra ID 身份验证提供了几个优势:- 无共享密钥——公共客户端流程不需要客户端密钥。令牌是短期的并作用于登录的用户。
- 个人责任——每个 API 调用都绑定到特定用户身份,便于审计谁做了什么。
- 条件访问——你的组织可以应用 Entra ID 策略,如 IP 限制、多重身份验证 (MFA) 和设备合规性检查。
Entra ID 身份验证的工作原理
如果你以前从未使用过 Microsoft Entra ID,它是 Microsoft 的云身份服务——为 Microsoft 365、XBOX 开发者帐户和 Azure 提供支持的相同身份系统。你的工具会请求 Entra ID 让开发者登录并返回一个短期访问令牌,而不是由 PlayFab 向你的工作室颁发长期密钥。PlayFab 信任 Entra ID 为你工作室成员用户颁发的令牌。 涉及三方:- **开发者。**你,使用 Microsoft 帐户(个人)或工作或学校帐户(Entra ID)登录。
- **Entra ID 中的应用注册。**这代表调用 PlayFab 的工具——一个 CLI、构建脚本、内部仪表板等。它告诉 Entra ID“允许此应用代表已登录的用户请求 PlayFab 访问令牌”。
- **PlayFab 服务。**PlayFab 在 Entra ID 中以应用程序 ID
448adbda-b8d8-4f33-a1b0-ac58cf44d4c1注册,并公开一个名为plugin的委托权限。当你的代码请求作用域448adbda-b8d8-4f33-a1b0-ac58cf44d4c1/plugin时,Entra ID 会颁发一个 PlayFab 接受的令牌。
- 你的代码使用 Microsoft 身份验证库 (MSAL) 启动登录——通常是浏览器弹出窗口或设备代码提示。
- 用户使用其 Microsoft 身份登录并同意你的应用代表他们调用 PlayFab。
- MSAL 返回一个访问令牌(一个 JWT)并缓存一个刷新令牌,以便将来的调用可以跳过提示。
- 你的代码在每个 PlayFab 请求上以
Authorization: Bearer <token>标头发送该令牌。 - PlayFab 验证令牌,将其映射到匹配的工作室用户,并根据该用户的角色授权调用。
先决条件
- 由 Entra ID 支持的 Microsoft 帐户(工作或学校帐户)或个人 Microsoft 帐户 (MSA)。
- 一个 PlayFab title。有关更多信息,请参阅创建 PlayFab 账户。
- 在你的 Microsoft Entra ID 租户中注册应用程序的权限。
- 调用方用户必须已添加到 PlayFab 工作室并指定为 title 管理员。有关角色的更多信息,请参阅 PlayFab 用户角色。
在 Entra ID 中注册公共客户端应用程序
你需要在 Entra ID 租户中注册一个应用程序,以便你的代码可以代表已登录的用户请求委托令牌。对于公共客户端流程(SPA、设备代码、隐式),不需要客户端密钥。- 登录 Azure 门户。
- 搜索并选择 App registrations,然后选择 New registration。
-
输入应用程序的名称(例如
PlayFab API Client)。 - 在 Supported account types 下,选择与你组织要求匹配的选项。为获得最大灵活性,请选择 Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant) and personal Microsoft accounts。此选项允许任何 Microsoft 帐户进行身份验证。
-
根据你的应用程序类型配置 Redirect URI:
- 对于单页应用程序 (SPA),选择 Single-page application (SPA) 并输入你的重定向 URI(例如
http://localhost:3000)。 - 对于使用设备代码流的原生或控制台应用程序,选择 Public client/native (mobile & desktop) 并输入
http://localhost。
- 对于单页应用程序 (SPA),选择 Single-page application (SPA) 并输入你的重定向 URI(例如
- 选择 Register。在概览页面上,记下 Application (client) ID。请求令牌时需要此值。
-
将 PlayFab API 权限添加到你的应用程序注册中:
- 在 Azure 门户中,导航到你的应用程序注册并选择 API permissions。
- 选择 Add a permission > APIs my organization uses。
- 搜索 PlayFab 应用程序 ID
448adbda-b8d8-4f33-a1b0-ac58cf44d4c1并选择它。 - 选择 Delegated permissions,选中 plugin 权限,然后选择 Add permissions。
如果你的场景需要机密(Web 应用)客户端,则还需要在 Certificates & secrets 下创建客户端密钥。本文重点介绍不需要密钥的公共客户端流程。有关机密客户端流程的更多信息,请参阅 Microsoft 身份平台和 OAuth 2.0 授权代码流。
设置 PlayFab 工作室访问
PlayFab 根据工作室成员身份验证 Entra ID 令牌。调用方用户必须已添加到 PlayFab 工作室并被授予适当的角色。- 让一位工作室管理员登录 Game Manager。
- 导航到工作室的 Users 部分。
- 选择 Add User 并输入需要 API 访问权限的开发者的 Microsoft 帐户电子邮件。
- 选择 Microsoft 作为身份验证提供程序。
- 为用户分配包括 Admin 或 Server API 访问权限的角色。至少,该用户必须是他们需要调用 API 的 title 的 title admin。
- 选择 Add user 发送邀请。
获取访问令牌
你的应用程序负责让用户登录并从 Entra ID 获取委托的访问令牌。以下示例展示了常见的公共客户端流程。交互式浏览器流程(推荐用于桌面和控制台应用)
交互式浏览器流程打开系统浏览器窗口进行登录。它是桌面应用程序和本地开发工具的推荐选项。带 PKCE 的授权代码流(推荐用于 SPA)
带 Proof Key for Code Exchange (PKCE) 的授权代码流是单页应用程序的推荐方法。以下 JavaScript 示例使用 Microsoft 身份验证库 (MSAL):使用访问令牌调用 PlayFab API
在你的 PlayFab API 请求中将 Entra ID 访问令牌作为 Bearer 令牌包含在Authorization 标头中,而不是使用 X-SecretKey 标头。
示例请求
你不能在同一请求中同时使用
X-SecretKey 和 Authorization: Bearer。每次调用使用一种身份验证方法。C# 示例
以下示例使用 Microsoft 身份验证库 (MSAL) 获取令牌并调用Server/GetTime API。将 your-client-id 替换为你应用注册中的 Application (client) ID。
Node.js 示例
以下示例使用@azure/msal-node 库获取令牌并调用 Server/GetTime API。将 your-client-id 替换为你应用注册中的 Application (client) ID。
令牌刷新
Entra ID 访问令牌是短期的(通常为 60–90 分钟)。如果你使用 MSAL,请在每个请求之前调用AcquireTokenSilent(C#)或检查令牌缓存——当有缓存的刷新令牌可用时,MSAL 会自动处理刷新。
如果你手动管理令牌,请在当前令牌过期之前使用相同的登录流程请求一个新令牌。
如果令牌在使用过程中过期,PlayFab 将返回
401 Unauthorized 响应。你的应用程序应通过请求新令牌并重试调用来处理此错误。故障排除
示例错误响应
当 Bearer 令牌缺失、格式错误或已过期时,PlayFab 返回的401 Unauthorized 如下所示:
403 Forbidden 如下所示:
限制
PlayFab SDK 当前不支持 Entra ID 身份验证。要今天使用 Entra ID 令牌调用 PlayFab API,请使用直接 HTTP 调用,并自行设置Authorization: Bearer <token> 标头,如 C# 和 Node.js 示例所示。SDK 支持计划在未来版本中提供。
