Web-登录、鉴权


cookie

存储在客户端,大小有限制,只能保存字符串,有效期可以设置长写

服务端回复set-cookie后,浏览器会设置cookie,可以设置是否能被脚本访问到

session

存储在服务端,基于cookie,用cookie中的sessionId标识,

Token

可以避免cookie重放攻击

对比

方式 特点 优点 缺点
cookie 1.存储在客户端。2.请求自动携带 cookie。3.存储大小 4KB。 1.兼容性好,因为是比较老的技术。
2.很容易实现,因为 cookie 会自动携带和存储。
1.需要单独解决跨域携带问题,比如多台服务器如何共享 cookie。
2.会遭受 CSRF 攻击。
3.存储在客户端,不够安全。
session 1.存储在服务端。2.存储大小无限制。 1.查询速度快,因为是个会话,相当于是在内存中操作。
2.结合 cookie 后很容易实现鉴权。
3.安全,因为存储在服务端。
1.耗费服务器资源,因为每个客户端都会创建 session。
2.占据存储空间,session 相当于存储了一个完整的用户信息。
token 1.体积很小。2.自由操作存储在哪里。 1.安全,因为 token 一般只有用户 id,就算被截取了也没什么用。
2.无需消耗服务器内存资源,它相当于只存了用户 id,session 相当于存储了用户的所有信息。
3.跨域处理较为方便,比如多台服务器之间可以共用一个 token。
4、可以防止跨域请求伪造攻击
1.查询速度慢,因为 token 只存了用户 id,每次需要去查询数据库。

SSO(单点登录)

JWT(JSON Web Token)

json格式的,使用.分割不同的部分,可以在url上传递

构成

头部、载荷、签名

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjpbeyJ1cmwiOiJodHRwczovL3Rvb2x0dC5jb20ifV0sImlhdCI6MTY0NjExMDgwNSwiZXhwIjoyNTU2MTE1MTk5LCJhdWQiOiIiLCJpc3MiOiJ0b29sdHQuY29tIiwic3ViIjoiIn0.NhUwqiPfYey9pKHSfrG-ptqEOamIQFK3-K7IrTeBFYU

base64URl解码后

{
  "alg": "HS256",
  "typ": "JWT"
}
{
  "data": [
    {
      "url": "https://tooltt.com"
    }
  ],
  "iat": 1646110805,
  "exp": 2556115199,
  "aud": "",
  "iss": "tooltt.com",
  "sub": ""
}

可以使用加密算法,对头部 + 载荷进行加密,

登录流程

JWS(JSON Web Signature)

对载荷内容进行签名,防止被篡改

JWE(JSON Web Encrption)

对内容加密后的载荷

Oauth2


文章作者: 王利康
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 王利康 !
  目录