一、token
举个栗子:
如何在客户端与服务器断开连接后,客户端不直接存储用户的账号和密码的情况下,实现自动登录,即避免用户多次输入登录。(持久化登录)
token机制:
- 客户端通过,账户和密码请求登录。
- 服务器收到请求,验证账户密码。验证成功后,签发一个字符串
token(包含部分用户信息和过期时间)给客户端。 - 客户端请求时,带上
token。 - 服务器收到请求后,验证
token,通过则返回对应数据,否则给出错误信息。
用户匹配:在实际使用中通过添加用户的少量信息,如 useId,就能将 token 与用户进行关联。
token校验:
token虽然可以持久化登录,但是服务器又该怎么确保token的正确性呢?(防止伪造)
- 防伪造:服务器利用私钥对一些不敏感的信息加密生成签名,将签名和数据拼接作为token的一部分。例如 JWT,参考JSON Web Token - 在Web应用间安全地传递信息。
- 干扰码:服务器生成
token时,可以使用客户端的UA作为干扰码对数据加密。客户端请求时,服务器可以使用UA对token解密。 - 有效期:通过加入有效期,使得
token仅在一段时间内有效,这样能尽量减少损失。
token刷新:
token 过期机制:
- 服务器缓存
token及对应的过期时间,需要服务器更新过期时间,token就会再次有效。 token中包含有过期时间。需要重新生成token。
当 token 过期了,如果客户端希望刷新 token 的话,需要重新引入数据来验证。一种是让用户重新输入账号密码。另一种方式就是使用摘要。即在生成 token 的同时,生成 token 的摘要,一起返回给客户端,类似于微信登录的 refresh_token。