Identity Provider Management

开发人员门户中的玩家身份管理概述。

阅读时间7分钟

Epic在线服务(EOS) 可以链接来自多个在线商店和游戏服务(也称 身份提供商(Identity Providers) 或“平台”)的玩家账号。这使用户能够在他们使用的不同平台上分享数据,参与跨平台功能,例如匹配。

EOS支持的身份提供商:

  • Amazon
  • Apple
  • Discord
  • Epic Games*
  • GOG Galaxy
  • Google
  • itch.io
  • Nintendo
  • Oculus
  • PlayStation Network
  • Steam
  • Xbox Live
  • OpenID

当用户在已启用的身份提供商上启动产品实例时(如上图所示),该产品使用连接接口对本地用户进行身份验证。

身份提供商提供身份验证令牌。EOS_EExternalCredentialTypeEOS_Connect_Login指定用于验证本地用户的身份验证令牌类型,以及要检查令牌可信度和有效性的身份提供商。对于具有多个环境的产品,可能需要多个身份验证令牌。

EOS验证提交的令牌和用户身份,使用身份提供商配置将用户连接到现有产品数据。

若玩家首次在新平台上玩游戏,EOS会发现玩家在该平台上没有该产品的数据。然后产品客户端可要求用户在当前平台上继续使用账号、在该平台上为该游戏创建新账号,或使用之前用于玩产品的另一个账号登录。

若用户选择用来自另一个身份提供商的现有账号登录,产品会询问用户是否要链接这两个账号。该初始事件结束后,EOS将记住用户玩该产品时使用的帐号,不会再次提示用户。

配置身份提供商

要配置产品的身份提供商,可以选择要访问的产品,点击 产品设置(Product Settings),选择 身份提供商(Identity Providers) 选项卡。然后可以使用 配置(Configure) 按钮配置各个提供商。

配置身份提供商之后,可以在你的任一产品沙盒中启用它,步骤是选择该产品,点击 产品设置(Product Settings) 并选择 环境(Environments) 选项卡。点击 身份提供商(Identity Providers) 按钮来为沙盒配置身份提供商。

OpenID提供商

如果你的公司拥有专有用户账号系统,你还可以通过添加OpenID提供商配置来添加身份验证支持,以使用EOS SDK验证用户身份,像其他身份提供商那样使用游戏服务。

OpenID提供商使用UserInfo API端点或JSON网络密钥集(JWKS)来验证令牌。

UserInfo API端点

要配置OpenID提供程序类型,还需为UserInfo端点返回的用户账号ID和显示名称指定JWT访问令牌的声明名称或JSON响应字段名称。

EOS身份验证后端使用传递到EOS_Connect_Login的访问令牌来调用UserInfo API端点。

API端点使用HTTPS协议,使用的方法是GET或POST HTTP。还必须实现以下可能的错误响应:

HTTP响应代码返回的EOS_EResult说明
200 OKEOS_Success访问令牌有效且可信。
401 UnauthorizedEOS_Connect_ExternalTokenValidationFailed访问令牌无效、过期或因故不可信任。
403 ForbiddenEOS_Connect_ExternalTokenValidationFailed警告 :这种情况不该发生。
404 Not FoundEOS_Connect_ExternalTokenValidationFailed警告 :这种情况不该发生。
500 Internal Server ErrorEOS_Connect_ExternalServiceUnvailable出错,身份验证服务无法完成请求。

JSON网络密钥集(JWKS)

OpenID提供商使用JWKS来验证提交的ID令牌。为此,你需要提供一个可公开访问的JWKS URL链接。

用户的账号ID提取自“sub”声明中。

ID令牌的预期受众值(“aud”声明)必须与用户显示名称的声明名称一起配置。

身份提供商相关信息

Nintendo

如果你的游戏应用依赖多个Nintendo App ID,请分别为它们的环境添加凭证条目,并勾选所有这些条目,使之用于EOS沙箱。

Oculus

默认情况下,Rift和Quest设备被Oculus生态系统视为两个独立平台。所以应用程序会根据用户使用的设备,可能会识别到不同的Oculus的基于App域的用户ID。EOS Connect后端仍然会在不同的Oculus设备上识别出相同的用户,因为账户链接密钥使用Oculus的基于组织域的用户ID来识别登录的用户。

如果用户在两台Oculus设备上都登录了应用程序,他们的EOS ProductUserID将在内部映射为两个独立的基于App域的Oculus用户ID。这使得用户的EOS数据可以像预期那样在Oculus设备上持久化。

然而,查询EOS_ProductUserID的关联Oculus账户将会以不确定的方式返回其中一个已知的Oculus基于App域的用户ID。因此,EOS SDK返回的Oculus用户ID(基于App域)可能与Oculus SDK识别到的Oculus用户ID(基于App域)不一致。例如,EOS SDK返回用户基于Rift的用户ID(基于App域),而用户目前正在使用Oculus Quest设备。

为了避免用户在不同设备上拥有不同的Oculus用户ID(基于App域),你可以使用Oculus应用分组功能来启用跨设备认证支持。这使Oculus生态系统可以在Oculus设备间复用相同的Oculus用户ID(基于App域),并将用户视为同一个用户。

有关这方面的更多信息,请参阅Oculus跨设备开发与应用分组

Steam

Epic账号服务需要使用Steam会话Ticket作为EOS_Auth_Login SDK API的登录凭据类型。你的游戏客户端必须专门使用ISteamUser::GetAuthTicketForWebApi来为EOS SDK获得相关Steamworks SDK API。这需要你的 Steamworks SDK是1.57或更高版本。

游戏服务支持以下Steam用户验证方法:

  • 通过Steamworks SDK的Steam会话票证和Steam加密应用票证。
  • 通过网页式登录流进行的Steam OAuth。

提示 :如果你的游戏使用Steam加密应用票证,请在你的Steamworks Web操作面板配置中为所有SteamAppID使用相同的加密密钥。这样你就可以在不同的Steam游戏版本中使用单一EOS凭据条目。