身份验证
OAuth 2.0不使用长久有效令牌而使用短时有效令牌来提供长期用户认证(通过刷新令牌)。刷新令牌允许用户在一段时间内留在应用程序中而不必重新输入用户名和密码。这样可以避免用户认证数据泄露的风险。
设置OAuth 2.0通过以下方式授权:
- 通过用户名或电子邮箱和密码
- 通过社交网络
- 通过Steam
如启用了该选项,则用户注册和认证通过调用FXsollaAuthToken
结构中,刷新令牌在RefreshToken
字段中指定。
要配置OAuth 2.0授权:
- 在发布商帐户中为登录管理器项目设置OAuth 2.0认证。
- 在UE4项目中设置插件。
在发布商帐户中设置登录管理器项目的OAuth 2.0认证
- 前往您的发布商帐户。
- 在侧边栏中单击登录管理器。
- 在登录管理器项目窗格中单击配置。
- 前往安全性区块,然后选择OAuth 2.0部分。
- 单击添加OAuth 2.0。
- 指定OAuth 2.0重定向URI,然后单击连接。
- 复制并保存客户端ID。
在虚幻引擎项目中设置插件
- 在虚幻编辑器中打开您的UE4项目。
- 前往
Settings > Project Settings > Plugins > Xsolla Login 。 - 启用
Use OAuth 2.0 选项。 - 在
Client ID 字段中指定在发布商帐户中设置OAuth 2.0时收到的客户端ID。
Login & Account System插件中实现了以下方法与刷新令牌交互:
RefreshToken
— 令牌过期后刷新令牌。ExchangeAuthenticationCodeToToken
— 用用户的认证代码换取一个有效的JWT。
RegisterUser
、GetSocialAuthenticationUrl
和AuthenticateWithSessionTicket
中的State
参数用于OAuth 2.0认证过程中的额外用户验证。该参数用于防止可能的CSRF攻击。
仅在使用以下插件时参考本方法详解:
- Game Commerce
- Cross-Buy
Cross-Buy插件将于2022年3月淘汰。您可以继续使用该插件,但它将不再更新及补充新功能。建议您转移到Game Commerce插件,该插件包含配合艾克索拉产品使用的所有类和方法。
您可以将SDK与自有授权系统集成。方法是实现通过自定义ID(在您的服务器上生成的用户ID)来识别用户身份,以打开游戏内商店、进行支付及管理物品库。
使用自有授权系统与艾克索拉服务器的交互过程:
- 您的客户端向您的服务器发送认证请求。
- 您的服务器授权用户并向艾克索拉服务器发送请求以接收用户JSON Web令牌(JWT),并传入自定义ID。
- 艾克索拉服务器返回用户JWT。
- 您的服务器将用户JWT传给客户端。
- SDK方法使用收到的用户JWT而不是授权令牌来打开游戏内商店、进行支付及管理物品库。
要将自有授权系统与艾克索拉产品配合使用:
- 在您的发布商帐户中设置服务器OAuth 2.0客户端。
- 实现获取服务器JWT。
- 实现获取用户JWT。
- 实现使用用户JWT与游戏内商店、购买项和物品库交互的逻辑。
设置服务器OAuth 2.0客户端
- 在发布商帐户中打开您的项目,然后前往登录管理器部分。
- 在登录管理器项目面板中单击配置。
- 前往安全性区块,然后选择OAuth 2.0部分。
- 单击添加OAuth 2.0。
- 指定OAuth 2.0重定向URI。
- 勾选机密(建议用于服务器对服务器连接)复选框。
- 单击连接。
- 复制并保存客户端ID和密钥。
获取服务器JWT
在应用程序的后端,实现一个方法通过生成JWT API调用来获取服务器JWT。请求必须包含以下参数:
grant_type
是JWT的类型,请传入值client_credentials
。client_secret
是设置服务器OAuth 2.0客户端时收到的密钥。client_id
是设置服务器OAuth 2.0客户端时收到的客户端ID。
获取用户JWT
在应用程序的后端,实现一个方法使用通过自定义ID进行认证API调用获取用户JWT。请求必须包含X-Server-Authorization: <server_JWT>
头,其中<server_JWT>
是在上一步中获得的服务器JWT。
使用用户JWT
使用SDK方法打开游戏内商店、进行支付及管理物品库。使用SDK方法时,请传入用户JWT而不是授权令牌。
以下教程包含该令牌的使用示例:
实现用户JWT过期后重新获取的逻辑。建议在后台获取新令牌,这样用户就无须重新登录应用程序。
本机用户认证(Native authentication)允许玩家通过安装至设备的应用程序使用社交网络帐户进行登录。目前SDK已实现通过以下社交网络进行本机用户认证:
- Game Commerce插件0.5.7及更高版本(适用于UE4)
- Login & Account System插件0.3.0及更高版本(适用于UE4)
- Cross-Buy插件0.3.0及更高版本(适用于UE4)
要配置本机用户认证:
- 在艾克索拉侧设置通过社交网络进行用户认证:
- 对于Facebook和Google,请在发布商帐户中设置社交网络连接。
- 对于微信和QQ,请联系您的客户成功经理或发送邮件至csm@xsolla.comcsm@xsolla.com进行设置。
- 为您的虚幻引擎项目设置SDK。
- 在应用程序侧实现身份认证逻辑。
在Facebook开发者帐户中设置应用页面
- 前往Facebook开发者帐户中的项目设置。
- 前往设置 > 基本。
- 单击添加平台,选择Android。
- 在Google Play包名称字段中指定您Android应用程序的包名称。
- 在类名字段中指定活动的完全限定类名称(默认值是
com.epicgames.ue4.GameActivity
)。 - 生成一个散列密钥并填入密钥散列字段中。
- 单击保存更改。
在接下来的本机用户认证配置中,还会用到设置 > 基本部分中的应用编号和应用密钥。
在Google API Console中设置项目
- 前往Google API Console。
- 单击新建项目。
- 指定项目名称和位置,然后单击保存。
- 前往所创建的项目,然后单击侧边栏上的OAuth同意屏幕。
- 选择外部,然后单击创建。
- 指定必需参数,然后单击保存。
- 在侧边栏上点击凭据。
- 为您的Android应用创建一个OAuth 2.0客户端:
- 单击创建凭据,选择OAuth客户端ID。
- 在应用类型字段中指定Android。
- 指定名称。
- 在包名称字段中指定您Android应用程序的包名称。
- 获取SHA密钥。
- 在SHA-1证书指纹字段中指定上一步中生成的SHA密钥。
- 单击创建。
- 单击确定。
- 为Web应用创建一个OAuth 2.0客户端:
- 单击创建凭据,选择OAuth客户端ID。
- 在应用类型字段中指定Web应用。
- 指定名称。
- 在已获授权的重定向URl部分单击添加URI,并指定
https://login.xsolla.com/api/social/oauth2/callback
URl。 - 单击创建。
- 单击确定。
在接下来的本机用户认证配置中,还会用到Web应用的客户端ID设置中的客户端ID和客户端密钥。
在艾克索拉发布商帐户中设置登录管理器项目的社交网络连接
- 在发布商帐户中打开您的项目。
- 在侧边栏中单击登录管理器,然后前往登录管理器项目 > 您的登录管理器项目 > 社交网络连接。
- 要设置通过Facebook进行认证:
- 在Facebook面板中单击编辑,将状态更改为断开连接。
- 在Application ID字段中指定Facebook开发者帐户中的应用编号。
- 在Application Secret字段中指定Facebook开发者帐户中的应用密钥。
- 单击连接。
- 要设置通过Google进行认证:
- 在Google面板中单击编辑,将状态更改为断开连接。
- 在Application ID字段中指定Google API Console中Web应用的客户端ID。
- 在Application Secret字段中指定Google API Console中Web应用的客户端密钥。
- 单击连接。
为虚幻引擎项目设置SDK
- 前往您的UE4项目。
- 前往
Settings > Project Settings > Plugins > Xsolla Login > Xsolla Login Android 。 - 勾选
Allow Native Auth 复选框。 - 在
Facebook App Id 字段中指定Facebook开发者帐户中的应用编号。 - 在
Google App Id 字段中指定Google API Console中的Web应用的客户端ID。
本机用户认证允许玩家通过安装的Steam客户端进入您的应用程序。设置通过Steam进行本机用户认证后,还可向应用程序添加通过Steam进行支付的功能。
要设置本机用户认证:
- 在发布商帐户中设置通过Steam进行静默认证。
- 配置您的UE4项目。
- 配置事件处理。
- 确保通过Steam进行认证。
配置您的虚幻引擎项目
- 前往UE4项目的
Config
目录。 - 在
DefaultEngine.ini
文件中添加下方代码并在SteamDevAppId
参数中指定您的Steam应用ID。
[/Script/Engine.GameEngine]
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
[OnlineSubsystem]
DefaultPlatformService=Steam
[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"
- 在虚幻编辑器中打开项目。
- 前往
Settings > Plugins > Online Platform 。 - 在
Online Subsystem Steam 模块,勾选Enabled 复选框,然后单击Restart Now 按钮保存设置并重新加载虚幻编辑器。
配置事件处理
- 下图显示如何将节点添加至项目:
- 要通过Steam认证用户,应使用
GetSessionTicket
方法获取session ticket
。然后在调用AuthenticateWithSessionTicket
方法时传入收到的值。随后即可获得调用API时需使用的令牌。- 如要额外进行令牌验证,请添加
ValidateToken
方法回调(可选)。
确保通过Steam进行认证
- 创建适用于独立平台的UE4项目的编译文件。
- 启动Steam并登录。
- 启动您的应用程序。如果一切正确,将显示Steam弹出窗口。
令牌失效可提高应用程序中用户认证数据的安全性。如启用该选项,每次用户认证时旧令牌将失效,新令牌将取代旧令牌。
使用SDK时,如果with_logout
参数值为1
,调用
要在您的UE4项目中启用令牌失效:
- 前往
Settings > Project Settings > Plugins > Xsolla Login 。 - 启用
Invalidate Existing Sessions 选项。
您可以使用艾克索拉启动器向用户交付应用程序及其更新。启动器包含一个内置的授权工具。如要避免重复输入用户名和密码的需要,可设置通过启动器授权进入应用程序。
设置SDK与启动器配合工作
- 在您的发布商帐户中设置启动器。
config.json
文件中,请更改以下对象的值:launcher_project_id
— 指定在发布商帐户 > 启动器 > 常规设置 > 常规信息中找到的启动器IDlogin_project_id
— 指定发布商帐户 > 启动器 > 常规设置 > 验证中找到的登录管理器ID
- 在您的应用程序中实现启动器授权逻辑。
- 生成启动器安装文件和编译版本压缩包。
- 创建应用程序编译版本。
- 将应用程序编译版本上传至艾克索拉更新服务器。
实现通过启动器进行授权的逻辑
通过启动器在应用程序中进行授权的过程如下:
- 用户授权进入启动器。
- 用户安装并运行应用程序。
- 启动器运行该应用程序并通过命令行传入用户参数。授权令牌在
xsolla-login-token
参数中传递。 - 应用程序处理命令行参数并获取令牌。
- 应用程序验证收到的令牌。
- 应用程序在不显示授权页面的情况下自动完成用户授权。
该逻辑的实现示例见演示项目的W_LoginDemo
蓝图。
创建应用程序编译版本
- 前往您的UE4项目。
- 在
Content Browser 中,打开用户授权Map,令牌在其中得到处理。 - 在主菜单中前往
Edit > Project Settings 。 - 前往
Project> Maps & Modes ,在Game Default Map 字段中选择之前打开的授权Map。
- 前往
Plugins > Xsolla Login 。 - 在
Project ID 字段中,指定在发布商帐户 > 项目设置 > 项目ID中找到的项目ID。 - 在
Login ID 字段中,指定在发布商帐户 > 启动器 > 常规设置 > 验证中找到的登录管理器ID。 - 根据创建的编译版本适用的平台,在主菜单中前往
File > Package Project > Windows (64 bit) 或File > Package Project > Mac 。 - 在弹出窗口中指定放置所得编译版本的目录路径。
设备ID认证能让用户在无需输入注册数据的情况下在移动设备上使用应用程序。用户首次使用设备ID登录应用程序时将自动创建一个新帐户,用户无需输入用户名、邮箱地址或其他数据。
您可以通过设备ID在后台模式下实现用户在一个或多个移动设备上的身份认证。要使用该功能,用户需将设备ID与现有帐户关联。
SDK支持在Android和iOS设备上通过移动设备的ID进行用户认证。
获取设备ID
设备ID由平台生成并可供该移动设备上安装的应用程序使用。SDK使用平台API获取ID值并使用该值通过艾克索拉API执行各种功能。
iOS设备ID在UIDevice.identifierForVendor属性中传递。Android设备ID在android.provider.Settings.Secure.ANDROID_ID常量中传递。使用标准UE4 Get Device Id方法判断该ID。
SDK方法
SDK实现以下功能的方法:
身份验证
SDK方法名称 | 描述 |
---|---|
AuthenticateViaDeviceId | 使用当前设备ID认证用户进入应用程序。 |
帐户升级
SDK方法名称 | 描述 |
---|---|
LinkEmailAndPassword | 添加可用于身份认证的用户名、邮箱地址和密码到当前帐户。 |
LinkSocialNetworkToUserAccount | 将可用于身份认证的社交网络关联至当前帐户。 |
设备管理
SDK方法名称 | 描述 |
---|---|
UpdateUsersDevices | 返回与当前用户帐户关联的设备的列表。 |
LinkDeviceToAccount | 将指定设备关联至当前用户帐户。 |
UnlinkDeviceFromAccount | 取消指定设备与当前用户帐户的关联。 |
发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。