解决 Session 的痛点,将用户信息存在浏览器 Cookie 或者 LocalStorage
对比来看,Token 就是 Session 与 sessionId 编码在一起,存放从服务器转移到浏览器
Token 的关键点在于编码防篡改,而不是防冒充,冒充靠的是短信验证码等方式
需要通过签名来防止篡改,只有服务器知道签名
成熟的规范就是 JWT
可以通过 JWT 库生成
内容包含:
鉴权的 Token 叫 access Token
越是权限敏感的业务,我们越希望 access token 有效期足够短,以避免被盗用。
再来一个 refresh Token 用来获取 access token,有效期可以长一点,通过独立服务和严格的请求方式增加安全性,而每次访问也刷新这个 Token 有效期
比如 access Token 是 1 天,refresh Token 是 7 天
连续每天登录就每天刷新 refresh Token,可以一直登录
7 天后再登录就需要重新登陆
无感刷新我感觉是 c 端很必备的功能,用户体验很棒
实现方式就是双 token
正常登录的叫登录 token,刷新用的叫刷新 token 吧
没有无感刷新时,登录校验失败时用户就需要重新登录
有无感刷新时,登录校验失败先拦截结果,如果没有进行无感刷新,则尝试访问一次无感刷新接口,否则正常提示用户重新登陆
无法中途改变权限或者取消授权
如果主域名相同,直接利用 Cookie 可以跨域的特点,将 Domain 配置为主域名
主域名不同的登录就需要独立的认证服务
首先区分一下域名级别,顶级域名一般是.com 这种,一级就是 baidu.com 这种,以此类推
三级域名例如https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html
一级域名可以读写二级域名的 cookie,二级三级等等可以读写父级域名的 cookie
可以通过域名进行基础的单点登录,但是有三个问题
邮箱登录 微信扫码登录