身份验证概述
启用用户身份验证并获取访问 XBOX services 数据授权的过程包括三个步骤。第一步是一次性预配步骤: 网站注册- 网站或 Web 应用获取用于 Microsoft 帐户的预配标识。
- 此注册在发行商的 Microsoft Entra ID 中进行。
- 用户访问网站或启动应用。
- 用户通过 OAuth2.0 端点被重定向以登录到其 Microsoft 帐户。
- 用户成功输入其凭据并同意网站或应用代表其访问 XBOX services 信息。
- 网站或应用收到授权代码。
- 网站或应用使用授权代码请求访问令牌,并请求正确的范围。
- 网站或应用收到访问令牌(如果请求了刷新令牌,还会收到刷新令牌)。
- 网站或应用使用访问令牌请求 XBOX services 用户令牌 (U 令牌)。
- 然后使用用户令牌从 XBOX 安全令牌服务 (XSTS) 获取 X 令牌(访问令牌),以访问 XBOX services 或游戏服务。
网站注册
要能够使用 Microsoft 帐户对网站上的用户进行身份验证,网站或应用首先需要通过 Microsoft Entra ID 应用注册界面进行注册。- 使用有权在 Microsoft Entra ID 中注册应用的帐户登录 Azure 门户
- 选择 “应用注册”
- 选择 ”+ 新注册”
- 输入此应用程序的名称
- 对于 “支持的帐户类型”,选择 “仅个人 Microsoft 帐户”
- 输入您希望身份验证流程在成功身份验证后将用户重定向到的重定向 URL。请记下此 URL,因为稍后会用到。 您以后也可以添加其他 URI
- 完成应用注册
- 记下应用程序(客户端)ID 和目录(租户)ID
- 选择证书和密钥
- 选择 ”+ 新客户端密钥”
- 输入描述
- 选择过期范围
- 单击”添加”
- 记下创建的客户端密钥值,因为稍后会用到。此值应仅在您的服务上安全地使用和存储。
集成
实现上述流程,并使用注册过程中创建的标识符实现以下内容:-
通过请求授权代码开始 OAuth2.0 流程:
- 将用户导航到
https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize?client_id=[Application (client) ID from Registration]&response_type=code&redirect_uri=[RedirectUI given during registration]&scope=xboxlive.signin&xboxlive.offline_access在此示例中,我们正在请求登录令牌和对离线令牌的访问权限,该离线令牌可用于在访问令牌过期后刷新它。这还将向用户显示正确的帐户隐私和活动通知。 - 用户完成登录其 Microsoft 帐户后,将被重定向到提供的重定向 URI,其中附加了带有
"code="后跟授权代码的授权代码。 - 使用
xboxlive.offline_access范围是可选的,仅需要用于在原始登录令牌过期后需要调用的场景。此请求不能使用其他附加范围。
- 将用户导航到
-
使用授权代码和应用程序注册过程中生成的客户端密钥兑换 Microsoft 帐户访问令牌:
- 创建具有以下属性的 POST Web 请求:
URL:
https://login.microsoftonline.com/consumers/oauth2/v2.0/token标头:Content-Type: application/x-www-form-urlencoded正文:
- 创建具有以下属性的 POST Web 请求:
URL:
- 来自服务的响应将包含一个 JSON 响应,其中包含以下信息:
令牌类型:
Bearer范围:XboxLive.signin XboxLive.offline_accessExpires_in:ValueAccess_token:[token value]这是您的访问令牌,您将使用它与 XBOX services 交换以获得 XBOX 用户令牌。
- 您可以通过调用 XBOX 身份验证端点并将您的 Microsoft 帐户访问令牌交换为 XBOX 用户令牌来请求 XBOX 用户令牌,完成以下请求:
- 创建具有以下属性的 POST Web 请求:
URL:
https://user.auth.xboxlive.com/user/authenticate标头:x-xbl-contract-version: 1标头:content-type: application/json正文: 一个格式正确的 json 有效负载,包括以下数据:
- 创建具有以下属性的 POST Web 请求:
URL:
- 来自服务的响应将包含一个 json 有效负载,其中包含以下信息,包括 XBOX 用户令牌。在下一步中您将需要 XBOX 用户令牌:
- 然后您可以将您的用户令牌交换为 X 令牌。如果您想代表用户执行服务到服务调用,并需要用户的 DelegationToken 声明或 XUID,您可以为自己的信赖方请求 X 令牌,然后像通常那样处理该令牌以提取所需的声明。
