[ 生活需要仪式感 ]

0%

微信小程序 |鉴权 token 体系

基本思路

每次打开小程序的启动页时,会有一个申请/检查 token 的机制,确保小程序本地有保存一个有效的鉴权 token。
在用户请求到对应业务逻辑之间,加入一个「鉴权」中间件。若鉴权 token 通过,则路由到对应的业务逻辑。若鉴权失败,则流程终止于鉴权中间件中。

启动页流程图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
           +--------------------------------+
| 启动页 |
+--------------------------------+
|
|
v
+----+ +--------------------------------+
| 有 | <-- | 本地是否保存token |
+----+ +--------------------------------+
| |
| |
| v
| +--------------------------------+
| | 无 |
| +--------------------------------+
| |
| |
| v
| +--------------------------------+
| | 小程序wx_login请求token |
| +--------------------------------+
| |
| |
| v
| +--------------------------------+
| | 业务服务器带着token换取open_id |
| +--------------------------------+
| |
| |
| v
| +--------------------------------+
| | 返回token且小程序本地储存 |
| +--------------------------------+
| |
| |
| v
| +--------------------------------+
+------> | 跳到主页/请求页 |
+--------------------------------+

业务请求流程图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
           +---------------+
| 用户请求 |
+---------------+
|
|
v
+----+ +---------------+
| 无 | <-- | 是否带有token |
+----+ +---------------+
| |
| |
| v
| +---------------+
| | 有 |
| +---------------+
| |
| |
| v
| +---------------+ +----------+
| | token鉴定 | --> | 成功 |
| +---------------+ +----------+
| | |
| | |
| v v
| +---------------+ +----------+
| | 失败 | | 业务逻辑 |
| +---------------+ +----------+
| |
| |
| v
| +---------------+
+------> | 终止流程 |
+---------------+

要点

  1. 鉴权是围绕着一个后端令牌(token)来进行的,整个用户请求过程不再出现 userId 或者 openId。
  2. 用户在登录时,根据自带的 wx_login 获得一个 code,后端服务器根据 code 与微信换取用户的唯一 ID 即 openId。后端服务器根据 openId 与对应用户绑定或新增,然后根据 userId 来生成一个 token 令牌。
  3. token 存储在 Redis 中,利用 Redis 的特性,可以实现过期自动销毁,以及删除 key 值使得令牌及时失效。