自定义用户数据存储
如果使用自定义用户数据存储,艾克索拉登录管理器将作为中介,所有用户身份认证数据将存储在您自己的系统中。艾克索拉登录管理器通过Webhook请求头和请求正文中的令牌传递身份认证数据。
交互过程
您可以使用登录管理器小组件或调用Login API的应用程序作为客户端。客户端与艾克索拉登录管理器服务器之间的交互流程如下:
- 客户端向艾克索拉登录管理器服务器发送请求。请求格式在JWT和密码端点中有详细说明。
- 艾克索拉登录管理器服务器向您的服务器发送Webhook。请求头包含带有
“request_type”: “gateway_token”
参数的服务器JWT。请按照说明设置令牌验证。部分用户身份认证数据将在Webhook请求正文中传递。 - 要确认收到Webhook,您的服务器必须返回以下响应:
- 如响应成功,返回
200
、201
或204
HTTP代码。 - 如未找到指定用户或传递了无效签名,则返回
400
HTTP代码和问题描述。如服务器出现临时问题,您的Webhook处理程序也可返回5xx
HTTP代码。
- 如响应成功,返回
- 艾克索拉登录管理器服务器处理您服务器的响应,并将授权令牌返回给客户端。
- 客户端处理响应。
如果您想在用户身份认证后将用户信息添加到JWT中,请在响应正文中返回包含任意参数集的JSON对象。该对象将保存在用户JWT的partner_data
字段中。
- 邮箱地址
- 昵称
- 出生日期
- 名字
- 姓氏
- 用户在您服务器上的ID
参数 | 类型 | 描述 |
---|---|---|
attr_type | string | 定义用户对服务属性的访问级别:
|
key | string | 用于识别用户属性的属性名称。对每个用户必须唯一。 最大长度:256个字符。可使用数字、英文字母、连字符和下划线。 |
permission | string or null | 对用户属性的访问权限类型影响方法返回的属性列表: 可能的值: public 、private (默认)。 |
read_only | string | 该属性是否不可修改。默认为false ,允许更改属性值。 |
value | string | 用户属性的值。 最大长度:256个字符。 |
用户注册
- 客户端向艾克索拉登录管理器服务器发送
Register new user POST
请求。请求必须包含Authorization: Bearer {JWT}
请求头和以下必需参数:projectId
查询参数 — 发布商帐户中登录管理器项目的ID。- 正文参数:
username
— 用户名。允许长度:3至255个字符。password
— 用户密码。允许长度:6至100个字符。email
— 用户邮箱地址。允许长度:1至255个字符。
- 艾克索拉登录管理器服务器向新用户URL发送Webhook。响应必须符合此交互流程中描述的格式。在响应中,您可以指定用户属性列表和/或任何必要的JSON对象。您在响应中提供的JSON对象将记录在用户JWT的
partner_data
字段中。
Webhook示例:
http
- http
- curl
1POST https://your.hostname/your_registration_uri HTTP/1.1
2Authorization: Bearer {JWT}
3Content-Type: application/json
4
5{
6 "email":"[email protected]",
7 "password":"123456",
8 "username":"[email protected]"
9}
1curl --request POST \
2 --url 'https://your.hostname/your_registration_uri' \
3 --header 'authorization: bearer_JWT' \
4 --header 'content-type: application/json' \
5 --data '{"email":"[email protected]","password":"123456","username":"[email protected]"}'
包含用户属性的Webhook响应示例:
- json
1{
2 "attributes": [
3 {
4 "attr_type": "server",
5 "key": "company",
6 "permission": "private",
7 "value": "facebook-promo"
8 },
9 {
10 "attr_type": "server",
11 "key": "custom-id",
12 "permission": "private",
13 "value": 48582
14 }
15 ]
16}
包含JSON对象的Webhook响应示例:
- json
1{
2 "id": 123456,
3 "role": "scout"
4}
- 用户数据写入艾克索拉数据库,并且
email
标记为未确认。用户将收到一封帐户验证邮件。 - 如果集成了登录管理器小组件,则用户将重定向到包含以下消息的页面:请按照发送至{email}的说明验证您的帐户。
- 如果用户注册不成功,可提供一条显示在认证小组件中的错误消息。方法是在用户创建请求的响应中,传入包含以下详细信息的
error
对象:- 在
code
参数中,指定错误代码,例如011-002
。 - 在
description
参数中,提供错误消息的文本。
- 在
- json
1{
2 "error": {
3 "code": "011-002",
4 "description": "<string>"
5 }
6}
通过用户名和密码进行认证
- 客户端向艾克索拉登录管理器服务器发送
Auth by username and password POST
请求。请求必须包含Authorization: Bearer {JWT}
请求头和以下必需参数:projectId
查询参数 — 发布商帐户中登录管理器项目的ID。- 正文参数:
username
— 用户名。允许长度:3至255个字符。password
— 用户密码。允许长度:6至100个字符。
- 艾克索拉登录管理器服务器向用户验证URL发送Webhook。响应必须符合此交互流程中描述的格式。在响应中,您可以指定用户属性列表和/或任何必要的JSON对象。您在响应中提供的JSON对象将记录在用户JWT的
partner_data
字段中。
用户验证URL Webhook示例:
http
- http
- curl
1POST https://your.hostname/your_authentication_uri HTTP/1.1
2Authorization: Bearer {JWT}
3Content-Type: application/json
4
5{
6 "email":"[email protected]",
7 "password":"123456",
8 "username":"[email protected]"
9}
1curl --request POST \
2 --url 'https://your.hostname/your_authentication_uri' \
3 --header 'authorization: bearer_JWT' \
4 --header 'content-type: application/json' \
5 --data '{"email":"[email protected]","password":"123456","username":"[email protected]"}'
包含用户属性的Webhook响应示例:
- json
1{
2 "attributes": [
3 {
4 "attr_type": "server",
5 "key": "company",
6 "permission": "private",
7 "value": "facebook-promo"
8 },
9 {
10 "attr_type": "server",
11 "key": "custom-id",
12 "permission": "private",
13 "value": 48582
14 }
15 ]
16}
包含JSON对象的Webhook响应示例:
- json
1{
2 "id": 123456,
3 "role": "scout"
4}
- 如果用户身份认证失败,您可以提供将在身份认证小组件中显示的错误消息。为此,请在用户创建请求的响应中传入包含以下详细信息的
error
对象:- 在
code
参数中,指定错误代码,例如011-002
。 - 在
description
参数中,提供错误消息文本。
- 在
- 艾克索拉登录管理器服务器生成用户JWT。
- 用户被重定向到包含
token
查询参数的login_url
。token
参数包含用户JWT。
通过手机号进行免密认证
- 客户端打开身份认证表单供用户输入手机号码。
- 用户输入手机号码。
- 客户端向艾克索拉登录管理器服务器发送
Start auth by phone number POST
请求。请求必须包含Authorization: Bearer {JWT}
请求头和以下必需参数:projectId
查询参数 — 发布商帐户中登录管理器项目的ID。phone_number
正文参数 — 用户手机号码。
- 客户端显示验证码输入字段。
- 用户输入收到的验证码。
- 客户端向艾克索拉登录管理器服务器发送
Complete auth by phone number POST
请求。请求必须包含Authorization: Bearer {JWT}
请求头和以下必需参数:projectId
查询参数 — 发布商帐户中登录管理器项目的ID。- 正文参数:
code
— 验证码。phone_number
— 用户手机号码。operation_id
— 验证码ID。
- 如果这是用户的首次授权,艾克索拉登录管理器服务器将向免密登录URL发送Webhook。响应必须符合交互流程中描述的格式。在响应中,您可以指定用户属性列表和/或任何必要的JSON对象。您在响应中提供的JSON对象将记录在用户JWT的
partner_data
字段中。 - 如果用户身份认证失败,您可以提供将在身份认证小组件中显示的错误消息。为此,请在用户创建请求的响应中传入包含以下详细信息的
error
对象:- 在
code
参数中,指定错误代码,例如011-002
。 - 在
description
参数中,提供错误消息文本。
- 在
http
- http
- curl
1POST https://your.hostname/your_phone_authentication_uri HTTP/1.1
2Authorization: Bearer {JWT}
3Content-Type: application/json
4
5{
6 "login": "+12025550140",
7 "type": "phone"
8}
1curl --request POST \
2 --url 'https://your.hostname/your_phone_authentication_uri' \
3 --header 'authorization: bearer_JWT' \
4 --header 'content-type: application/json' \
5 --data '{"login":"+12025550140","type":"phone"}'
包含用户属性的Webhook响应示例:
- json
1{
2 "attributes": [
3 {
4 "attr_type": "server",
5 "key": "company",
6 "permission": "private",
7 "value": "facebook-promo"
8 },
9 {
10 "attr_type": "server",
11 "key": "custom-id",
12 "permission": "private",
13 "value": 48582
14 }
15 ]
16}
包含JSON对象的Webhook响应示例:
- json
1{
2 "id": 123456,
3 "role": "scout"
4}
通过邮箱进行免密认证
- 客户端打开身份认证表单供用户输入邮箱地址。
- 用户输入邮箱地址。
- 客户端向艾克索拉登录管理器服务器发送
Start auth by email POST
请求。请求必须包含Authorization: Bearer {JWT}
请求头和以下必需参数:projectId
查询参数 — 发布商帐户中登录管理器项目的ID。email
正文参数 — 用户邮箱地址。
- 客户端显示验证码输入字段。
- 用户输入收到的验证码。
- 客户端向艾克索拉登录管理器服务器发送
Complete auth by email POST
请求。请求必须包含Authorization: Bearer {JWT}
请求头和以下必需参数:projectId
查询参数 — 发布商帐户中登录管理器项目的ID。- 正文参数:
username
— 用户名。允许长度:3至255个字符。code
— 验证码。email
— 用户邮箱地址operation_id
— 验证码ID。
- 如果这是用户的首次授权,艾克索拉登录管理器服务器将向免密登录URL发送Webhook。响应必须符合交互流程中描述的格式。在响应中,您可以指定用户属性列表和/或任何必要的JSON对象。您在响应中提供的JSON对象将记录在用户JWT的
partner_data
字段中。 - 如果用户身份认证失败,您可以提供将在身份认证小组件中显示的错误消息。为此,请在用户创建请求的响应中传入包含以下详细信息的
error
对象:- 在
code
参数中,指定错误代码,例如011-002
。 - 在
description
参数中,提供错误消息文本。
- 在
Webhook示例:
http
- http
- curl
1POST https://your.hostname/your_email_authentication_uri HTTP/1.1
2Authorization: Bearer {JWT}
3Content-Type: application/json
4
5{
6 "email": "[email protected]",
7 "type": "email"
8}
1curl --request POST \
2 --url 'https://your.hostname/your_email_authentication_uri' \
3 --header 'authorization: bearer_JWT' \
4 --header 'content-type: application/json' \
5 --data '{"email": "[email protected]","type": "email"}'
包含用户属性的Webhook响应示例:
- json
1{
2 "attributes": [
3 {
4 "attr_type": "server",
5 "key": "company",
6 "permission": "private",
7 "value": "facebook-promo"
8 },
9 {
10 "attr_type": "server",
11 "key": "custom-id",
12 "permission": "private",
13 "value": 48582
14 }
15 ]
16}
包含JSON对象的Webhook响应示例:
- json
1{
2 "id": 123456,
3 "role": "scout"
4}
通过社交网络进行身份验证
要在通过社交网络进行认证时获取用户数据,请在发布商帐户的登录管理器项目设置中指定社交帐户登录URL(在用户数据库 > 存储 > 自定义存储部分)。包含从社交网络获取的数据的请求将发送到该URL。
身份认证流程:
- 客户端向艾克索拉登录管理器服务器发送
Auth via social network POST
请求。请求必须包含Authorization: Bearer {JWT}
请求头和以下必需参数:projectId
查询参数 — 发布商帐户中登录管理器项目的ID。provider_name
路径参数 — 在发布商帐户中连接到登录管理器的社交网络名称。可以是:amazon
、apple
、babka
、baidu
、battlenet
、discord
、epicgames
、facebook
、github
、google
、kakao
、linkedin
、mailru
、microsoft
、msn
、naver
、ok
、paypal
、qq
、reddit
、steam
、twitch
、twitter
、vimeo
、vk
、wechat
、weibo
、xbox
、yahoo
、yandex
、youtube
。
- 用户登录社交网络。
- 艾克索拉登录管理器服务器会处理从社交网络获取的用户数据,并向社交帐户登录URL发送Webhook。响应必须符合交互流程中描述的格式。在响应中,您可以指定用户属性列表和/或任何必要的JSON对象。您在响应中提供的JSON对象将记录在用户JWT的
partner_data
字段中。
用户数据将在Authorization
请求头中以临时网关令牌(包含“request_type”: “gateway_token”)
的服务器令牌)的形式传递。
网关令牌的主要字段:
声明 | 类型 | 描述 |
---|---|---|
exp | Unix Timestamp | JWT的过期日期和时间。JWT寿命为7分钟。 必需。 |
iat | Unix Timestamp | 使用该JWT时的日期和时间。 必需。 |
iss | string | 签名JWT的服务,例如https://login.xsolla.com 。 必需。 |
request_type | string | 常量:gateway_request 。 必需。 |
xsolla_login_project_id | string (UUID) | 您发布商帐户的登录管理器项目ID。 必需。 |
string | 用户邮箱地址。 | |
sub | string (UUID) | 写入在艾克索拉登录管理器服务器侧的用户ID。 必需。 |
username | string | 用户名。 |
provider | string | 认证使用的社交网络的名称。 必需。 |
id | string | 社交网络中的用户ID。 必需。 |
social_access_token | string | 用户通过其进行身份认证的社交网络的访问令牌。要启用此声明的传输,请联系您的客户成功经理或发送邮件至[email protected]。 |
partner_data | string | 您的服务器在用户认证期间在响应正文中返回的任何类型的数据。要启用此声明的传输,请联系您的客户成功经理或发送邮件至[email protected]。 |
- json
1{
2 "exp": 1573635020,
3 "iat": 1573634600,
4 "iss": "https://login.xsolla.com",
5 "request_type": "gateway_request",
6 "xsolla_login_project_id": "00000000-0000-0000-0000-000000000000",
7 "sub": "00000000-0000-0000-0000-000000000000",
8 "email": "[email protected]",
9 "username": "Smith707",
10 "provider": "google",
11 "id": "123",
12}
社交帐户登录URL Webhook示例:
http
- http
- curl
1POST https://your.hostname/your_social_authentication_uri HTTP/1.1
2Authorization: Bearer {JWT}
3Content-Type: application/json
4
5{}
1curl --request POST \
2 --url 'https://your.hostname/your_social_authentication_uri' \
3 --header 'authorization: bearer_JWT' \
4 --header 'content-type: application/json'
包含用户属性的Webhook响应示例:
- json
1{
2 "attributes": [
3 {
4 "attr_type": "server",
5 "key": "company",
6 "permission": "private",
7 "value": "facebook-promo"
8 },
9 {
10 "attr_type": "server",
11 "key": "custom-id",
12 "permission": "private",
13 "value": 48582
14 }
15 ]
16}
包含JSON对象的Webhook响应示例:
- json
1{
2 "id": 123456,
3 "role": "scout"
4}
- 如果用户身份认证失败,您可以提供将在身份认证小组件中显示的错误消息。为此,请在用户创建请求的响应中传入包含以下详细信息的
error
对象:- 在
code
参数中,指定错误代码,例如011-002
。 - 在
description
参数中,提供错误消息文本。
- 在
用户密码重置
- 客户端向艾克索拉登录管理器服务器发送
Reset password POST
请求。请求必须包含Authorization: Bearer {JWT}
请求头和以下必需参数:projectId
查询参数 — 发布商帐户中登录管理器项目的ID。username
请求正文参数 — 用户名。允许长度:3至255个字符。
- 艾克索拉登录管理器服务器向用户发送密码重置确认邮件。
- 用户在邮件中确认重置密码后,将被重定向到可输入新密码的页面。
- 用户输入新密码。
- 艾克索拉登录管理器服务器向密码重置URL发送Webhook。
- 如果密码重置失败,您可以提供将在身份认证小组件中显示的错误消息。为此,请在用户创建请求的响应中传入包含以下详细信息的
error
对象:- 在
code
参数中,指定错误代码,例如011-002
。 - 在
description
参数中,提供错误消息文本。
- 在
密码重置URL的Webhook示例:
http
- http
- curl
1POST https://your.hostname/your_reset_uri HTTP/1.1
2Authorization: Bearer {JWT}
3Content-Type: application/json
4
5{
6 "username": "[email protected]",
7 "fields": {
8 "password": "NewPa$$word1"
9 }
10}
1curl --request POST \
2 --url 'https://your.hostname/your_reset_uri' \
3 --header 'authorization: bearer_JWT' \
4 --header 'content-type: application/json' \
5 --data '{"email":"[email protected]","fields":{"password":"NewPa$$word1"}}'
继续阅读
有用链接
如何连接自定义存储发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。