自定义存储

运行机制

可使用自定义存储来保存用户数据。用户数据也会保存在艾克索拉侧,但密码只通过自定义存储来验证。

如果使用自定义存储,可实现以下功能:

您可以使用艾克索拉登录管理器小组件或您的应用程序(使用Login API方法)作为客户端。客户端与艾克索拉登录管理器服务器之间的交互流程如下:

  1. 客户端向艾克索拉登录管理器服务器发送请求。请求格式见JWTGeneral方法组的说明。
  2. 艾克索拉登录管理器服务器向您的服务器发送请求。请按照说明验证请求。
  3. 艾克索拉登录管理器服务器处理您服务器的响应并将结果返回给客户端。
  4. 客户端处理响应。

用户注册

  1. 客户端向艾克索拉登录管理器服务器发送Register a New User请求。
  2. 艾克索拉登录管理器服务器发送请求至新用户URL。响应必须为此说明中所述的格式。

请求示例:

POST https://example.registration.com

Headers:
Content-Type: application/json
Authorization: Bearer {JWT}

Body:
{
  "email": "john@gmail.com",
  "password": "123456"
}

  1. 用户数据写入艾克索拉数据库,并且email标记为未确认。用户将收到一封帐户验证邮件。
  2. 如果集成了登录管理器小组件,则用户将重定向到包含以下消息的页面:请按照发送至{email}的说明验证您的帐户

通过用户名和密码进行认证

  1. 客户端向艾克索拉登录管理器服务器发送Auth by Username and Password请求。
  2. 艾克索拉登录管理器服务器发送请求至用户认证URL。响应必须为此说明中所述的格式。

请求示例:

POST https://example.authentication.com

Headers:
Content-Type: application/json
Authorization: Bearer {JWT}

Body:
{
  "email": "john@gmail.com",
  "password": "123456"
}

  1. 艾克索拉登录管理器服务器生成一个用户JWT。
  2. 用户重定向到包含一个token查询参数的login_urltoken参数包含用户JWT。

Note: 如果艾克索拉数据库中未写入该用户数据,则创建一个新用户。

通过社交网络进行认证

要在通过社交网络进行身份认证时获取用户数据,请指定社交网络认证Webhook URL。包含从社交网络所获数据的请求将发送至该地址。请将您的社交网络认证Webhook URL发送给帐户经理以使用此功能。

认证流程:

  1. 客户端向艾克索拉登录管理器服务器发送Auth via Social Network请求。
  2. 用户登录到某个社交网络。
  3. 艾克索拉登录管理器服务器处理从该社交网络收到的用户数据并向社交网络认证Webhook URL发送一个请求。响应必须为此说明中所述的格式。

请求在临时令牌的Authorization: Bearer <JWT>头中包含数据。请求中传入的用户JWT包含如下数据:

声明类型描述
expUnix TimestampJWT的过期日期和时间。JWT寿命为7分钟。 必需
iatUnix Timestamp使用该JWT时的日期和时间。 必需
issstring签名JWT的服务,例如https://login.xsolla.com必需
request_typestring常量:gateway_request必需
xsolla_login_project_idstring (UUID)您发布商帐户的登录管理器项目ID。 必需
emailstring用户邮箱地址。
substring (UUID)写入在艾克索拉登录管理器服务器侧的用户ID。 必需
usernamestring用户名。
providerstring认证使用的社交网络的名称。 必需
idstring社交网络中的用户ID。 必需

令牌负载示例:

{
  "exp": 1573635020,
  "iat": 1573634600,
  "iss": "https://login.xsolla.com",
  "request_type": "gateway_request",
  "xsolla_login_project_id": "00000000-0000-0000-0000-000000000000",
  "sub": "00000000-0000-0000-0000-000000000000",
  "email": "example@test.com",
  "username": "Smith707",
  "provider": "google",
  "id": "123",
}

请求示例:

POST https://example.social.authentication.com

Headers:
Content-Type: application/json
Authorization: Bearer {JWT}

Body:
{}

用户密码重置

  1. 客户端向艾克索拉登录管理器服务器发送Reset Password请求。
  2. 艾克索拉登录管理器服务器向用户发送一封密码重置确认邮件。
  3. 用户在邮件中确认密码重置后,将被重定向到输入新密码的页面。
  4. 用户输入新的密码。
  5. 艾克索拉登录管理器服务器向密码重置URL发送请求。响应必须为此说明中所述的格式。

请求示例:

POST https://example.reset.com

Headers:
Content-Type: application/json
Authorization: Bearer {JWT}

Body:
{
  "username": "john@gmail.com",
  "fields": {
    "password": "NewPa$$word1"
  }
}

使用者

集成了登录管理器并实现了基于JWT标准的认证方式的合作伙伴。

如何获取

要设置艾克索拉登录管理器服务器和客户端之间的连接:

  1. 连接自定义存储。
  2. 设置对来自艾克索拉登录管理器服务器请求的处理。

连接自定义存储

  1. 前往发布商帐户 > 登录管理器项目 > 常规设置
  2. 用户数据存储部分,选择自定义存储
  3. 输入用于发送API请求的URL:
    • 用户验证URL
    • 新用户URL
    • 密码重置URL
    • 邮箱更改URL
  4. 实施API,以下面的方式响应:
    • 使用HTTP 200/HTTP 204指示请求成功。如果需要,可以将包含其他用户数据的JSON置于响应正文中。传输的数据将写入JWT > partner_data参数。
    • 使用其他HTTP状态代码指示失败的请求。

Info: 如果希望JWT中包含数据库中的用户ID,请联系您的帐户经理。

验证来自艾克索拉登录管理器服务器的请求

艾克索拉登录管理器服务器请求发送至您的URL,且包含Authorization: Bearer <JWT>头。JWT已使用您的项目密钥签名。

要验证该JWT:

  1. 复制密钥的值(发布商帐户 > 您的登录管理器项目 > 常规设置 > 密钥)。
  2. 选择一个,然后将密钥值传递给验证函数。
  3. 如果验证成功,则解码JWT并确保其包含下表中的声明。查找并使用一个用于解码。

声明类型描述
expUnix TimestampJWT的过期日期和时间。JWT寿命为7分钟。
iatUnix Timestamp使用该JWT时的日期和时间。
issstring签名JWT的服务,例如https://login.xsolla.com
request_typestring常量:gateway_request
xsolla_login_project_idstring (UUID)您发布商帐户的登录管理器项目ID。

令牌负载示例:

{
  "exp": 1573635020,
  "iat": 1573634600,
  "iss": "https://login.xsolla.com",
  "request_type": "gateway_request",
  "xsolla_login_project_id": "00000000-0000-0000-0000-000000000000"
}