# 小游戏登录态管理

小游戏可以通过 TapTap 提供的登录能力方便地获取用户身份标识,快速建立小游戏内的用户体系。

# 登录流程时序

┌─────────┐                    ┌─────────┐                    ┌─────────┐
│  小游戏  │                    │开发者服务器│                   │  TapTap │
└────┬────┘                    └────┬────┘                    └────┬────┘
     │                              │                              │
     │       1. tap.login()         │                              │
     │─────────────────────────────────────────────────────────────>│
     │                              │                              │
     │       2. 返回 code            │                               │
     │<─────────────────────────────────────────────────────────────│
     │                              │                              │
     │       3. 发送 code            │                              │
     │─────────────────────────────>│                              │
     │                              │                              │
     │                              │   4. code2Session(code)      │
     │                              │─────────────────────────────>│
     │                              │                              │
     │                              │   5. openid + session_key    │
     │                              │<─────────────────────────────│
     │                              │                              │
     │     6. 返回自定义登录态         │                              │
     │<─────────────────────────────│                              │
     │                              │                              │

# 说明

  1. 小游戏客户端调用 tap.login() 获取临时登录凭证 code,并回传到开发者服务器
  2. 开发者服务器调用 code2Session 接口,换取用户唯一标识 openidunionid会话密钥 session_key

之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。

注意:

  1. 会话密钥 session_key 是对用户数据进行加密签名的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小游戏,也不应该对外提供这个密钥
  2. 临时登录凭证 code 只能使用一次

# 登录态维护

小游戏登录态具有时效性,开发者在小游戏客户端使用登录态时,可先调用 tap.checkSession() 检测当前用户登录态是否有效。登录态过期后,开发者可以调用 tap.login() 重新获取登录态。

session_key 具有唯一性,在使用小游戏时,同一用户在同一时刻仅有一个有效的 session_key。

通过 tap.login() 接口获得的用户登录态拥有一定的时效性。用户越久未使用小游戏,用户登录态越有可能过期。反之如果用户一直在使用小游戏,则用户登录态一直保持有效。具体时效逻辑由应用维护,对开发者透明。

# 安全说明

为了保证用户数据和业务安全,开发者服务器在使用 session_key 时需注意以下几点:

  1. session_key 是对用户数据进行加密签名的密钥,使用 code 换取的 session_key 需要保存在服务器中,不应该传递给小游戏客户端
  2. 开发者应该通过自定义登录态管理用户状态,不应该直接使用 session_key 作为登录态管理
  3. 开发者通过 session_key 加解密数据时,需要对数据的有效性进行校验,防止篡改