使用 XSTS 令牌或 OAuth 2.0 从服务请求用户 Store ID
本主题介绍服务如何从服务生成用户 Store ID,而无需从游戏客户端交换访问令牌和用户 Store ID。 以下方案有利于生成用户 Store ID 的方法:
- 在流中没有游戏客户端的体验
- 将用户的 Xbox 帐户链接到用户自己的服务帐户
- 已使用 XSTS 令牌身份验证的游戏和服务,用于客户端到服务和服务到服务的调用
有关用户 Store ID 的常规信息,请参阅请求用户 Store ID 用于服务间身份验证。
XSTS 令牌要求
此过程需要使用委派身份验证 XSTS 令牌来识别用户 Store ID 将代表的用户。
有关委托身份验证 XSTS 令牌以及如何创建它们的详细信息,请参阅 游戏服务调用 Xbox 服务 (NDA 主题) 要求授权。
生成用户应用 Store ID 的 OAuth 2.0 要求
如果服务使用 OAuth 让用户使用其 Microsoft 帐户 (MSA) 登录,则需要以下各项:
- 用户必须具有绑定到其 Microsoft 帐户的 Xbox 标识,因为需要交换 OAuth 凭据以获取 XSTS 令牌(见上文)。
- 请求的 OAuth 范围必须包括
xboxlive.signin
和xboxlive.offline_access
,确保该流获得用户适当同意,并能够检索到所需的 XSTS 令牌。
有关在服务上使用 Xbox 服务登录和 OAuth 的详细信息,请参阅 游戏网站的 Xbox 服务登录 (NDA 主题) 要求授权。
使用 OAuth 2.0 凭据时的步骤
使用 OAuth,我们可以获得用户的同意,并交换 OAuth 凭据和令牌,以便针对用户自己的信赖方为用户创建 XSTS 令牌。 为用户创建 XSTS 令牌后,可按照下文使用 XSTS 令牌的步骤中所述,在相同流中使用该令牌。
用于交换 XSTS 令牌的 OAuth 凭据的大纲流:
- 获取 OAuth 2.0 授权代码
- 交换 RPS 令牌的授权代码(也称为 Microsoft 帐户访问令牌)
- 交换 Xbox 用户令牌的 RPS 令牌
- 针对用户自己的信赖方交换 XSTS 令牌的 Xbox 用户令牌
- 按照使用 XSTS 令牌的步骤,使用 X 令牌。
有关上述步骤的完整实现详细信息,请参阅 游戏网站的 Xbox 服务登录 (NDA 主题) 要求授权。
使用 XSTS 令牌的步骤
一旦我们创建了 XSTS 令牌来标识我们自己的信赖方的用户,就可以使用令牌中的 DelegationToken 声明来创建用于创建用户 Store ID 的委派身份验证 XSTS 令牌。 此流的初始 XSTS 令牌可以来自游戏客户端,也可以来自上面列出的 OAuth2.0 流。
用于创建委派身份验证 XSTS 令牌的大纲流:
- 从用户的 XSTS 令牌中提取 DelegationToken 声明 (dlt)。
- 使用业务合作伙伴证书从 XSAS 服务获取服务令牌。
- 为委派身份验证 XSTS 令牌交换 DelegationToken、服务令牌和目标信赖方(见下表)。
有关如何创建委托身份验证 XSTS 令牌的完整实现详细信息,请参阅 游戏服务调用 Xbox 服务 (NDA 主题) 要求授权。
在步骤 3 中,将使用的信赖方取决于是为用户生成用户集锦 ID 还是用户购买 ID:
用户 Store ID 类型 | 信赖方的委派身份验证 XSTS 令牌 | 用于创建用户 Store ID 的 URI |
---|---|---|
用户集锦 ID | http://licensing.xboxlive.com |
https://collections.mp.microsoft.com/v7.0/beneficiaries/me/keys |
用户购买 ID | http://mp.microsoft.com/ |
https://purchase.mp.microsoft.com/v7.0/users/me/keys |
请求
为用户和相应的信赖方获取委派身份验证 XSTS 令牌后,就可以请求用户Store ID。
为此,我们根据生成的用户 Store ID 的类型(见上表),向相应的 URI 发出 HTTPS POST 请求。
请求语法
方法 | 请求 URI |
---|---|
POST |
collections.mp.microsoft.com/v7.0/beneficiaries/me/keys |
POST |
purchase.mp.microsoft.com/v7.0/users/me/keys |
请求头文件
标头 | 类型 | 说明 |
---|---|---|
Authorization |
string |
必需。 以格式表示用户的委托身份验证 XSTS 令牌 XBL3.0 x=[User Hash];[Token] |
Host |
string |
必须与所调用的 URI 的主机匹配 |
Content-Length |
number |
请求正文的长度。 |
Content-Type |
string |
指定请求和响应类型。 当前,唯一受支持的值为 application/json 。 |
请求正文
参数 | 类型 | 说明 | 必需 |
---|---|---|---|
serviceTicket |
string |
服务的集锦访问令牌或购买访问令牌基于调用的 URI。 有关创建这些访问令牌的信息,请参阅了解不同的令牌和受众 URI。 | 是 |
publisherUserId |
string |
将标记到用户 Store ID 的可选值,可用于你自己的跟踪 | 否 |
请求示例
POST https://collections.mp.microsoft.com/v7.0/beneficiaries/me/keys HTTP/1.1
Authorization: XBL3.0 x=13178812777611882182;eyJlbmMiOiJBMTI4Q0JDK...
Content-Length: 1352
Content-Type: application/json;
Host: collections.mp.microsoft.com
{
"serviceTicket": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIn...",
"publisherUserId": "CustomPublisherUserId"
}
响应
响应正文
参数 | 类型 | 说明 | 必需 |
---|---|---|---|
key |
string |
用户 Store ID,然后可以使用 Microsoft Store 服务进行服务到服务身份验证 | 是 |
响应示例
HTTP/1.1 200 OK
Date: Wed, 23 Mar 2022 23:06:25 GMT
Content-Type: application/json;
Content-Length: 1716
MS-CorrelationId: dd5be303-f9a0-408a-bd01-e8c63afa721a
MS-RequestId: 0b9c8e5e-dfdd-4cf8-bfbe-93a5be3a7f48
MS-CV: rqFUH3gA+UOmTyXe.0
{"key":"eyJhbGciOiJSUzI1NiIsImtpZCI6IjY..."}