0


【前端学习】前端权限--cookie、token、session、JWT

即前端存储cookie相关内容,又看到了token,session,JWT感觉有点混乱了

一. 授权、鉴权与身份验证

首先搞清楚鉴权,授权和身份验证

  1. 身份验证(authentication): 确认用户的身份,需要用户提供证明自己身份的凭证。例如:用户登录网站时需要 (用户名+密码),系统通过匹配存储的凭据来验证用户是否是真实的。身份验证的结果: 系统确认用户是谁,但还不知道用户有权执行哪些操作。
  2. 授权(authorization: 经过身份验证的用户是否有权限去执行一些操作或者访问一些资源。 授权的结果 系统允许或拒绝用户执行特定操作或访问资源。
  3. 鉴权: 包含了 (身份验证+授权)

二.鉴权的两种常用机制

(1) cookie-session鉴权

流程:

  1. 用户登录: 用户登录时提交用户名和密码到服务器;
  2. 服务器验证: 服务器验证用户名和密码;
  3. 创建Session: 验证成功后,服务器创建一个Session,并将sessionId发送给客户端。通过 setcookie('sessionId', 'id_value')
  4. 客户端存储sessionId: 客户端收到Session ID后,通常将其存储在Cookie中。
  5. 请求携带Cookie: 客户端在后续的每次请求中,都会自动在HTTP请求头中携带Cookie。
  6. 服务器验证sessionId: 服务器收到请求后,通过Cookie中的sessionId查找对应的Session。
  7. 处理请求: 验证通过后,服务器处理请求并返回响应。
setcookie(name,value, expire, path, domain, secure, httponly, samesite);

优点:

  • 安全性较高,可以通过cookie的HttpOnlySecure属性增强其安全性;
  • 服务器能够控制session的失效;

缺点:

  • 服务器端需要存储session信息,增加服务器的存储压力;
  • 不支持跨域共享session;
(2) JWT (JSON Web Tokens) 鉴权机制

流程:

  1. 用户登录: 用户登录时提交用户名和密码到服务器;
  2. 服务器验证: 服务器验证用户名和密码;
  3. 生成JWT并返回给用户: 服务器验证成功后生成一个JWT,也就是一个包含用户标识信息并通过密钥签名的token,将JWT返回到客户端;
  4. 客户端接收并存储JWT: 客户端接收到请求后将JWT存储在localStorage或者sessionStorage中;cookie也不是一定不能存储
  5. 客户端请求携带JWT: 客户端在后续的每次请求中,都会在HTTP请求头(一般是authorization 字段)中携带JWT;
  6. 服务器验证JWT: 服务器收到请求后验证JWT的有效性,包括签名、过期时间等, 确认用户的身份和权限。
JWT的身份信息,权限,有效期等信息都包含在这个token中,有效期是由其中的exp字段来控制

优点

  • 无状态验证, 由于JWT是自包含的,无需服务器存储跟踪每个JWT的状态,服务器只需验证JWT的签名,时间戳等信息来决定token是否生效。
  • 跨域支持:JWT可以很容易在不同的域之间共享。

缺点:

  • token长度较大,会占用较大的带宽;
  • token一旦签发,就无法在服务器端废除,直到过期;

安全问题: 为了安全,JWT通常设定较短的有效期(15min或者1h),防止token被盗后长期有效。JWT过期,服务器会拒绝请求返回

401 Unauthorized
两种机制的适用场景
  • JWT适合用于分布式系统、微服务架构和需要跨域认证的场景、单点登录,多个app之间的身份互验(从支付宝登录淘宝)
  • Cookie-Session适合用于传统的单体应用,以及对安全性要求较高的场景,小型或者单一域名。

那么总结一下最初的疑问吧!

  • cookie其实就是前端存储,用于存储一些较小的数据,用户登录状态之类。可以在每次发送请求的时候,跟随域名(domain属性)相同的请求被发送到服务器。有HttpOnlySecuresamesite属性来确保一定的安全性,能够防止XSS攻击和CSRF攻击,具有一定的有效时间(由服务器控制)。
  • token的话就是令牌,用于表征用户身份信息。可以存储在localStorage,sessionStorage或者cookie中。localStorage中居多,这种情况需要开发者手动读取token。存储在localStorage中的token也容易受到XSS的攻击,因此其有效时间会比较短。
  • session就是服务器端的会话,管理和不同用户之间的交互数据。使得无状态的http可保存用户信息。
  • JWT是一种特殊的token,用于用户身份验证和授权的~

本文转载自: https://blog.csdn.net/weixin_45626095/article/details/142491252
版权归原作者 JAMJAM_NoName 所有, 如有侵权,请联系我们删除。

“【前端学习】前端权限--cookie、token、session、JWT”的评论:

还没有评论