OAuth 2.0协议

概览

登录管理器产品支持用户注册和身份认证使用OAuth 2.0标准协议。OAuth 2.0标准认证协议注重客户端应用程序开发的简化,允许在无需用户参与的情况下刷新令牌。关于OAuth 2.0协议的详细信息,请访问其官方网站用户JWT用作访问令牌。

OAuth 2.0客户端与艾克索拉登录管理器服务器之间的交互如下图所示:

要设置OAuth 2.0协议:

  1. 连接登录管理器产品。
  2. 设置艾克索拉PlayFabFirebase存储。
  3. 连接OAuth 2.0客户端

连接OAuth 2.0客户端

  1. 发布商帐户中打开您的项目,然后前往登录管理器部分。
  2. 在登录管理器方案面板中单击配置
  3. 前往安全性区块,然后选择OAuth 2.0部分。
  1. 单击添加OAuth 2.0客户端
  1. 在模态窗口中,指定:
    • 客户端名称。
    • 用户完成帐户验证、成功认证或密码重置确认后将其重定向到的URI。
    • 认证类型:公开、机密或服务器。
注:
关于认证类型(客户端类型)的信息,请参阅The OAuth 2.0 Authorization FrameworkConfidential and Public Applications。服务器和机密认证类型都使用机密客户端,但其授权对应用程序进行访问的方式不同(详细信息请参阅Application Grant Types):
  • 对于服务器认证:grant_type=client_credentials
  • 对于机密和公开认证:grant_type=authorization_codegrant_type=refresh_token
如使用通过Login API集成,选择认证类型时应考虑以下特性:

  1. 单击连接

  1. 将生成一个客户端ID和密钥,在您的应用程序中设置OAuth 2.0认证时需用到。

  1. 在对话框窗口中,用复制按钮复制客户端ID密钥

获取OAuth 2.0客户端设置

如连接OAuth 2.0客户端时未复制客户端ID和密钥,需进行以下操作来获得该数据:

  1. 发布商帐户中打开您的项目,然后前往登录管理器部分。
  2. 在登录管理器方案的面板中单击配置
  3. 前往安全性区块,然后选择OAuth 2.0部分。
  4. 在所需的OAuth 2.0客户端所在行:
    • 复制客户端ID字段的内容。
    • 单击客户端密钥复制密钥。

客户端ID和密钥对应于Login API方法中的client_idclient_secret参数。与OAuth 2.0客户端交互时需用到这些值。

注:
在您的应用程序中实现OAuth 2.0认证时,建议使用客户端库中的代码。它们能帮助您包含您的信息和用户数据的安全。

在应用程序侧进行集成

有以下几种集成方式可用:

Login API和登录管理器小组件交互时,会用到scope参数。它接受以下值:

  • offline,用于刷新令牌。请将scope=offline传入注册或认证方法。
  • email,用于在用户通过社交网络认证时请求其邮箱地址。如果是通过Login API集成登录管理器产品,请将scope=email传入注册或认证方法。通过登录管理器小组件集成时,请按照收集邮箱地址和手机号码的说明来配置用户邮箱地址的收集。

通过登录管理器小组件集成

如已通过登录管理器小组件配置集成,请将client_idresponse_typestate、和redirect_uri参数添加到集成代码。在redirect_uri参数中,必须指定在发布商帐户中连接OAuth 2.0客户端时设置的值。您还可以添加scope参数。

请求示例:

Copy
Full screen
Small screen
<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方法和以下参数值:

API方法响应将返回以下令牌:

  • access_token — 访问令牌。默认有效期是1小时。
  • refresh_token — 刷新令牌。没有有效期限制。

请求示例:

Copy
Full screen
Small screen

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刷新令牌,然后可以再进行刷新。

请求示例:

Copy
Full screen
Small screen

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_tokenrefresh_token令牌对将失效。如要更改同时用户会话的数量限制,请联系您的客户成功经理或发送邮件至csm@xsolla.com
本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
上次更新时间: 2024年12月20日

发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。

报告问题
我们非常重视内容质量。您的反馈将帮助我们做得更好。
请留下邮箱以便我们后续跟进
感谢您的反馈!