单点登录
运行机制
如果您有若干关联的服务且使用一个通用单一帐户来认证用户,可使用单点登录解决方案。游戏网站可用作一个服务,用户只需输入一次凭证即可。如果用户之后再打开其他关联的服务,即为已认证状态。
交互过程
- 未认证的用户打开其中一个服务。
- 您的服务器向艾克索拉登录管理器服务器发送
Check user authentication 请求并得到错误401。 - 您的客户端打开用户认证表单(通过登录管理器小组件或您的登录管理器UI)。
- 用户通过用户名和密码或社交网络帐户进行认证。
- 您的客户端在您的登录管理器项目中认证用户:用户会话数据保存在艾克索拉登录管理器服务器上。服务器发送包含
redirect_uri和查询参数为code的login_uri。
- 您的服务器将用户重定向至
redirect_uri。 - 您的服务器发送
Generate JWT 请求用收到的code换取JWT。用户即在该服务上完成认证。 - 用户打开另一个服务。
- 您的服务器向艾克索拉登录管理器服务器发送
Check user authentication 请求并收到包含redirect_uri和查询参数为code的login_uri。 - 您的服务器发送
Generate JWT 请求用收到的code换取JWT。用户即在第二个服务上完成认证。
%%{init: {'themeVariables': { 'noteBkgColor': 'transparent', 'noteBorderColor': 'transparent' }}}%%
sequenceDiagram
participant U as 用户
participant CS1 as 已连接服务1
participant XL as 艾克索拉登录管理器服务器
participant LW as 登录小组件
participant CS2 as 已连接服务2
U->>CS1: 打开服务
CS1->>XL: 发送用户认证状态检查请求
activate XL
XL-->>CS1: 发送“Unauthorized”(未授权)错误(401)
deactivate XL
CS1->>LW: 打开身份认证表单
U->>LW: 输入凭据
activate LW
LW->>XL: 认证用户身份
deactivate LW
activate XL
XL-->>LW: 返回包含授权码的链接
deactivate XL
activate LW
LW-->>CS1: 将用户重定向至收到的链接
deactivate LW
activate CS1
CS1->>XL: 发送用户JWT生成请求
deactivate CS1
activate XL
XL-->>CS1: 返回用户JWT
deactivate XL
U->>CS2: 打开其他服务
activate CS2
CS2->>XL: 发送用户认证状态检查请求
deactivate CS2
activate XL
XL-->>CS2: 将用户重定向至收到的链接
deactivate XL
activate CS2
CS2->>XL: 发送用户JWT生成请求
deactivate CS2
activate XL
XL-->>CS2: 返回用户JWT
deactivate XL
区分不同服务的访问权限
要区分不同服务的用户帐户访问权限,可在不同OAuth 2.0客户端中为scope=playfab)。
适用对象
集成了登录管理器并使用艾克索拉、Firebase或PlayFab数据库的合作伙伴。
如何获取
要关联单点登录:
连接OAuth 2.0协议
按照此说明连接OAuth 2.0协议。您可以为所有服务使用一个OAuth 2.0客户端,也可以为每个服务创建单独的OAuth 2.0客户端。
调用获取用户会话的请求
实现打开服务时
请求示例:
Copy
http
- http
- curl
1GET 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
1curl --request GET \
2 --url 'https://login.xsolla.com/api/oauth2/sso?redirect_uri=redirect_uri&response_type=code&state=state&scope=scope&client_id=client_id'
用户已认证的响应示例:
Copy
- http
1HTTP/1.1 200 OK
2Content-Type: application/json
3
4{
5 "login_url": "<redirect_uri>?code=<code>"
6}
要获取用户JWT:
- 您的客户端实现并使用将用户重定向至收到的
redirect_uri的请求。 - 您的服务器发送
Generate JWT 请求并包含收到的code和grant_type=authorization_code,以获得一个JWT。
用户未认证的响应示例:
Copy
- http
1HTTP/1.1 401 Unauthorized
2Content-Type: application/json
3
4{
5 "error": {
6 "code": "003-040",
7 "description": "User is unauthorized."
8 }
9}
本文对您的有帮助吗?
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。