信赖方配置
要使用自定义 Web 服务,游戏必须先在合作伙伴中心完成单一登录配置。有关详细信息,请参阅 配置信赖方。 信赖方配置在发行商级别和所有沙盒中配置。最佳做法是尽可能对相同的游戏服务(跨不同的游戏)使用相同的信赖方配置。Webservice Endpoint 配置
除了信赖方配置之外,还必须在合作伙伴中心中为游戏服务配置服务端点才能使用合作伙伴 XSTS 令牌。有关详细信息,请参阅 Web 服务。 Web 服务端点在全局DefaultNsal 配置中按游戏级别配置。DefaultNsal 是当前游戏的唯一配置类型。以前配置的游戏可能使用反映其他环境的其他配置类型,例如 CertificationNsal 和 RetailNsal。为简化配置,新游戏无法使用这些配置类型。
Web 服务 SSL 证书
所有 Web 服务端点都必须使用 HTTPS 并使用由受信任证书颁发机构 (CA) 颁发的 SSL 证书。这些证书不得在 Web 服务端点配置中指定。 对于开发和测试,游戏可以使用自签名 SSL 证书,但如果可以使用受信任的根证书,则不建议这样做。 XBOX 控制台默认不信任自签名 SSL 通信。 除非将证书添加到合作伙伴中心内游戏单一登录页面上的 Webservice Endpoint 定义中,否则 HTTPS 连接将失败。 有关已识别 CA 的列表,请参阅安全文档中的 参与者列表 - Microsoft 受信任根程序。服务还可以从 letsencrypt.org 等组织获取免费的、受信任的 SSL 证书。令牌检索和连接流程
所有游戏服务端点都应要求合作伙伴 XSTS 令牌进行身份验证和授权。如果没有此信息,应拒绝与服务的通信。 对于 Web 服务,合作伙伴 XSTS 令牌和用户标识(用户哈希)必须包含在请求的Authentication 标头中。有关这些标头结构的详细信息,请参阅 XBOX services 安全令牌 (XSTS 令牌)。
对于安全 TCP/UDP 服务,合作伙伴 XSTS 令牌和用户标识(用户哈希)应包含在初始授权/握手消息中。如果没有此信息,应拒绝与服务的通信。对于这些连接,可以指定占位符作为 Webservice Endpoint URI,以反映服务的域。
在客户端获取合作伙伴 XSTS 令牌并发送 HTTPS 请求
游戏客户端通过 XUserGetTokenAndSignatureUtf16Async API 使用以下流程获取合作伙伴 XSTS 令牌和签名标头数据。- 对当前用户调用
XUserGetTokenAndSignatureUtf16Async。在 API 调用中包含服务的 URL 和(如果适用)自定义标头或消息正文。 该 API 检索 XSTS 令牌和消息签名,供目标端点或 XBOX 服务使用。 - 通过
XUserGetTokenAndSignatureUtf16Result从异步结果中检索 XSTS 令牌和签名。XUserGetTokenAndSignatureUtf16Result返回加密的 XSTS 令牌。游戏应将返回的令牌视为不透明数据。令牌数据不得写入磁盘或缓存在游戏空间中,除非用于随后的服务调用。令牌缓存由XUserGetTokenAndSignatureUtf16Async为您处理。 - 使用 Microsoft Windows HTTP Services (WinHTTP)、XSTS 令牌和签名值创建对目标端点的 HTTPS 请求。
所有 HTTPS 调用都必须通过 WinHTTP API 执行,将 XSTS 令牌值添加到
Authentication标头,将签名值作为Signature标头。
- 游戏指定服务的占位符 URI,而不是服务调用 URL。
- 身份验证数据在 TCP/UDP 连接的初始授权/握手期间使用。
在服务器上处理合作伙伴 XSTS 令牌
游戏服务接收合作伙伴 XSTS 令牌后,该服务必须解析、解密并验证令牌的真实性。 有关解析和验证 XSTS 令牌的详细信息,请参阅 XBOX services 安全令牌 (XSTS 令牌)。 我们还强烈鼓励服务开发人员使用 Game Service 示例 和 Xfest 2019 演示文稿 XSTS Auth and Server to Server Made Easy 进行审查和测试。 该示例具有带有令牌处理的完整服务库。身份验证和授权
在解析、解密和验证令牌后,服务可以信任令牌的声明。 有关所有 XSTS 令牌声明的列表,请参阅 XBOX services 安全令牌声明。 服务应首先使用这些声明进行服务级身份验证和授权。 合作伙伴 XSTS 令牌中包含的信息应始终被视为权威信息。 服务调用不需要通过请求的其他部分复制此信息。 必须特别注意用户身份。它必须始终通过 XSTS 令牌声明进行验证,并且不能在未经其他来源验证的情况下用于服务请求。要识别用于身份验证目的的用户,游戏服务有两个选项。- /user/pXUID (ptx) 声明。 对于只需要用于帐户链接身份的任何场景,应使用合作伙伴 XUID (pXUID)。此声明公开当前发行商下用户的 XBOX services 帐户的唯一标识符。
- /user/XID 声明。 对于需要服务返回用户身份或对 XBOX services 执行服务到服务调用的任何场景,都需要用户的 XUID。此类服务的示例包括自定义排行榜或匹配服务,或通过 XBOX services 服务调用验证购买的服务。
PXUID 的范围限定为在合作伙伴中心创建您的信赖方时选择的业务合作伙伴。如果您正在使用多个信赖方的 x-token,则它们必须共享相同的业务合作伙伴,PXUID 值才能匹配。有关业务合作伙伴和信赖方配置的详细信息,请参阅 在合作伙伴中心设置 Web 服务。
