OAuth 2.0协议
概览
登录管理器产品支持用户注册和身份认证使用OAuth 2.0标准协议。OAuth 2.0标准认证协议注重客户端应用程序开发的简化,允许在无需用户参与的情况下刷新令牌。关于OAuth 2.0协议的详细信息,请访问其官方网站。用户JWT用作访问令牌。
OAuth 2.0客户端与艾克索拉登录管理器服务器之间的交互如下图所示:
要设置OAuth 2.0协议:
- 连接登录管理器产品。
- 设置艾克索拉、PlayFab或Firebase存储。
- 连接OAuth 2.0客户端。
连接OAuth 2.0客户端
- 在发布商帐户中打开您的项目,然后前往登录管理器部分。
- 在登录管理器方案面板中单击配置。
- 前往安全性区块,然后选择OAuth 2.0部分。
- 单击添加OAuth 2.0客户端。
- 在模态窗口中,指定:
- 客户端名称。
- 用户完成帐户验证、成功认证或密码重置确认后将其重定向到的URI。
- 认证类型:公开、机密或服务器。
- 对于服务器认证:
grant_type=client_credentials
; - 对于机密和公开认证:
grant_type=authorization_code
或grant_type=refresh_token
。
- 机密客户端要求在调用生成JWT方法获取或更新访问令牌时使用客户端ID和密钥。
- 公开客户端仅要求使用客户端ID。
- 通过用户名和密码进行JWT认证方法调用仅适用于公开认证。
- 单击连接。
- 将生成一个客户端ID和密钥,在您的应用程序中设置OAuth 2.0认证时需用到。
- 在对话框窗口中,用复制按钮复制客户端ID和密钥。
获取OAuth 2.0客户端设置
如连接OAuth 2.0客户端时未复制客户端ID和密钥,需进行以下操作来获得该数据:
- 在发布商帐户中打开您的项目,然后前往登录管理器部分。
- 在登录管理器方案的面板中单击配置。
- 前往安全性区块,然后选择OAuth 2.0部分。
- 在所需的OAuth 2.0客户端所在行:
- 复制客户端ID字段的内容。
- 单击客户端密钥复制密钥。
客户端ID和密钥对应于Login API方法中的client_id
和client_secret
参数。与OAuth 2.0客户端交互时需用到这些值。
在应用程序侧进行集成
有以下几种集成方式可用:
与Login API和登录管理器小组件交互时,会用到scope
参数。它接受以下值:
offline
,用于刷新令牌。请将scope=offline
传入注册或认证方法。email
,用于在用户通过社交网络认证时请求其邮箱地址。如果是通过Login API集成登录管理器产品,请将scope=email
传入注册或认证方法。通过登录管理器小组件集成时,请按照收集邮箱地址和手机号码的说明来配置用户邮箱地址的收集。
通过登录管理器小组件集成
如已通过登录管理器小组件配置集成,请将client_id
、response_type
、state
、和redirect_uri
参数添加到集成代码。在redirect_uri
参数中,必须指定在发布商帐户中连接OAuth 2.0客户端时设置的值。您还可以添加scope
参数。
请求示例:
- html
<script>
const xl = new XsollaLogin.Widget({
projectId: 'LOGIN_PROJECT_ID',
preferredLocale: 'en_US',
clientId: 'CLIENT_ID',
responseType: 'code',
state: 'CUSTOM_STATE',
redirectUri: 'REDIRECT_URI',
scope: 'SCOPE'
});
</script>
通过Login API集成
使用用于OAuth 2.0协议的API方法来注册和认证用户。如果已集成了用于JWT标准的方法,请替换为OAuth 2.0方法调用。
调用身份认证方法时,用收到的code
参数换取访问令牌。
通过艾克索拉SDK集成
艾克索拉SDK支持基于OAuth 2.0协议的用户认证。要设置OAuth 2.0客户端,请选择游戏引擎或平台并按照相应说明进行操作:获取访问令牌
要获取用户访问令牌,请使用生成JWT方法和以下参数值:
authorization_code
,用于grant_type
参数;offline
,用于scope
参数(后续刷新访问令牌必需);client_id
— OAuth 2.0客户端设置值;client_secret
— OAuth 2.0客户端设置值(公开OAuth 2.0客户端不需要);redirect_uri
— 在发布商帐户中连接OAuth 2.0客户端时设置的值;- 用户在应用程序中成功认证或注册后收到的
code
。
API方法响应将返回以下令牌:
access_token
— 访问令牌。默认有效期是1小时。refresh_token
— 刷新令牌。没有有效期限制。
请求示例:
http
- http
- curl
POST https://login.xsolla.com/api/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
client_id=11&client_secret=vGbXcsQ0CEW233m2qldYkd5IxbnRKoWt2YiBOgHYJGRGQwtIAdtxgxT64ik&code=ldYkd5IxbnRKoWt2YiBOgHYJGRGQwtIAdtxgxT64ik&grant_type=authorization_code&redirect_uri=https://my-website.com/callback
curl --request POST \
--url https://login.xsolla.com/api/oauth2/token \
--header 'content-type: application/x-www-form-urlencoded' \
--data grant_type=authorization_code \
--data client_secret=vGbXcsQ0CEW233m2qldYkd5IxbnRKoWt2YiBOgHYJGRGQwtIAdtxgxT64ik \
--data client_id=11 \
--data redirect_uri=https://my-website.com/callback \
--data code=ldYkd5IxbnRKoWt2YiBOgHYJGRGQwtIAdtxgxT64ik
刷新访问令牌
访问令牌过期时,请使用生成JWT方法和上次收到的刷新令牌(refresh_token
)的值进行更新。grant_type
参数等于refresh_token
。
API方法响应将返回一对新令牌:access_token
访问令牌和refresh_token
刷新令牌,然后可以再进行刷新。
请求示例:
http
- http
- curl
POST https://login.xsolla.com/api/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
client_id=11&client_secret=vGbXcsQ0CEW233m2qldYkd5IxbnRKoWt2YiBOgHYJGRGQwtIAdtxgxT64ik&grant_type=refresh_token&refresh_token=111dfgdfgdf&redirect_uri=https://my-website.com/callback
curl --request POST \
--url https://login.xsolla.com/api/oauth2/token \
--header 'content-type: application/x-www-form-urlencoded' \
--data grant_type=refresh_token \
--data client_secret=vGbXcsQ0CEW233m2qldYkd5IxbnRKoWt2YiBOgHYJGRGQwtIAdtxgxT64ik \
--data client_id=11 \
--data redirect_uri=https://my-website.com/callback \
--data refresh_token=111dfgdfgdf
access_token
和refresh_token
令牌对将失效。如要更改同时用户会话的数量限制,请联系您的客户成功经理或发送邮件至csm@xsolla.com。发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。