用户身份验证
在 Steam 中,客户端启动游戏时用户总是“已登录”。除了初始化 API 之外,游戏无需其他操作就能访问用户的 Steam ID。Steam 中的身份验证指的是使用ISteamUser API 通过 session ticket(点对点或专用服务器)、加密应用票据(经安全服务器)或 Steam Web API,验证用户预设的身份就是当前登录客户端并启动游戏的用户。身份验证之后,Steam Web 或 ISteamUser API 可使用票据验证当前游戏或其可下载内容(DLC)的所有权。
在 XBOX Game Development Kit(GDK)中,这一验证步骤并不必要,因为在你按照 初始化 XBOX Game Development Kit(GDK) 中的步骤为用户登录时,验证已经完成了。因此,XBOX Game Development Kit(GDK)并没有与 Steam 的 session ticket 或加密应用票据相对应的机制来在多人会话中验证用户身份。
所有权与数字版权管理(DRM)
要验证用户是否有资格玩当前游戏,你需要使用XStore API 中的 XStoreQueryGameLicenseAsync 函数,检查用户是否拥有玩该游戏的许可证。在异步回调中检查:
- 查询是否成功(即用户有许可证)。
- 从
XStoreQueryGameLicenseResult获得的许可证是否仍处于活动状态。
ISteamUser/CheckAppOwnership,或调用带 app ticket 的 SteamEncryptedAppTicket::BIsTicketForApp。
有关执行这一检查的更多信息与代码示例,参见 XStore: 基础 DRM 与许可证检查。该主题还介绍了更稳健的许可证检查方案,以防止通过篡改绕过客户端检查。
Steam 还提供了 DRM 包装器,XBOX Game Development Kit(GDK)没有对应机制。Microsoft Store 会在启动从其安装的应用时进行反盗版检查。为获得完整的 DRM 保护,我们建议在运行上述链接示例代码中的许可证检查之外,还额外采用第三方方案。
检查 DLC 的所有权
如果你的游戏关联了 DLC,可以使用XStore API 检查用户的 Microsoft Store 账号是否有权访问某个条目。要检查这些许可证,首先使用 XStoreQueryAssociatedProductsAsync 函数查询与游戏关联的所有产品,然后使用 XStoreAcquireLicenseForPackageAsync 函数(类似于 ISteamUser/CheckAppOwnership 或 ISteamUser::UserHasLicenseForApp)获取查询结果列表中特定 DLC 条目的许可证。
与游戏使用权检查一样,你需要检查许可证是否成功获取且处于活动状态。两项检查都通过时,你可以认为用户被授权访问该 DLC 条目。有关此流程的代码示例,参见 管理并授权可选包(DLC)。
