单点登录

运行机制

如果您有若干关联的服务且使用一个通用单一帐户来认证用户,可使用单点登录解决方案。游戏网站可用作一个服务,用户只需输入一次凭证即可。如果用户之后再打开其他关联的服务,即为已认证状态。

交互过程

  1. 未认证的用户打开其中一个服务。
  2. 您的服务器向艾克索拉登录管理器服务器发送Check user authentication请求并得到错误401。
  3. 您的客户端打开用户认证表单(通过登录管理器小组件或您的登录管理器UI)。
  4. 用户通过用户名和密码或社交网络帐户进行认证。

  1. 您的客户端在您的登录管理器项目中认证用户:
    • 如果是通过API调用集成登录管理器,则会使用以下请求:
    • 如果是通过小组件集成登录管理器,则会使用OAuth 2.0协议。
    用户会话数据保存在艾克索拉登录管理器服务器上。服务器发送包含redirect_uri和查询参数为codelogin_uri

  1. 您的服务器将用户重定向至redirect_uri
  2. 您的服务器发送Generate JWT请求用收到的code换取JWT。用户即在该服务上完成认证。
  3. 用户打开另一个服务。
  4. 您的服务器向艾克索拉登录管理器服务器发送Check user authentication请求并收到包含redirect_uri和查询参数为codelogin_uri
  5. 您的服务器发送Generate JWT请求用收到的code换取JWT。用户即在第二个服务上完成认证。

区分不同服务的访问权限

要区分不同服务的用户帐户访问权限,可在不同OAuth 2.0客户端中为scope参数赋予特殊值(例如scope=playfab)。

适用对象

集成了登录管理器并使用艾克索拉FirebasePlayFab数据库的合作伙伴。

如何获取

要关联单点登录:

  1. 连接OAuth 2.0协议。
  2. 实现获取用户会话请求的回调。

连接OAuth 2.0协议

按照此说明连接OAuth 2.0协议。您可以为所有服务使用一个OAuth 2.0客户端,也可以为每个服务创建单独的OAuth 2.0客户端。

调用获取用户会话的请求

实现打开服务时Check user authentication请求的回调。该请求应在向用户打开认证表单之前执行。对于认证,请使用用户要认证的具体服务的OAuth 2.0客户端参数。

请求示例:

Copy
Full screen
Small screen

http

  • http
  • curl
GET https://login.xsolla.com/api/oauth2/sso?client_id=<client_id>&redirect_uri=<redirect_uri>&scope=<scope>&state=<state>&response_type=code HTTP/1.1
curl --request GET \
  --url 'https://login.xsolla.com/api/oauth2/sso?redirect_uri=redirect_uri&response_type=code&state=state&scope=scope&client_id=client_id'

用户已认证的响应示例:

Copy
Full screen
Small screen
HTTP/1.1 200 OK
Content-Type: application/json

{
  "login_url": "<redirect_uri>?code=<code>"
}

要获取用户JWT:

  1. 您的客户端实现并使用将用户重定向至收到的redirect_uri的请求。
  2. 您的服务器发送Generate JWT请求并包含收到的codegrant_type=authorization_code,以获得一个JWT。

用户未认证的响应示例:

Copy
Full screen
Small screen
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
  "error": {
    "code": "003-040",
    "description": "User is unauthorized."
  }
}
本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
上次更新时间: 2024年7月31日

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

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