Cookie、Session、Token 、JWT和Oauth2.0介绍

当我们谈论现代Web应用程序和API的安全性与身份验证时,这些术语常常被提及。它们各自有不同的作用和实现方式。下面是对每个概念的详细介绍:

  • Cookie 是HTTP协议的一部分,主要用于会话管理、个性化设置以及用户跟踪。Cookies由服务器在响应HTTP请求时设置,并通过HTTP头Set-Cookie发送给浏览器。浏览器会存储这些Cookie,并在之后对同一服务器的每次请求中通过Cookie HTTP头发送它们。Cookies通常包含一个唯一的ID,服务器用它来识别用户并维持用户的登录状态。
  • 安全方面,Cookies可以通过设置HttpOnly属性来防止客户端脚本访问,通过Secure属性确保仅通过HTTPS发送,以及通过SameSite属性来阻止跨站请求伪造(CSRF)。

Session

  • Session 是在服务器端存储用户数据以持续跨多个请求的技术。用户的每次访问(会话)都可以由服务器创建一个唯一的Session ID,并且通常将此ID存储在Cookie中。服务器根据Session ID识别请求,并从服务器存储中检索用户的状态信息。
  • Sessions提供了一种在服务器上保持用户数据的方式,而不是在用户的浏览器上。这意味着可以存储敏感数据,因为它们不会直接发送到浏览器。

Token

  • Token 是一种认证机制,用于在客户端和服务器之间传递状态信息。不同于存储在服务器的Session,Token通常在客户端保存状态。Token在用户登录时生成,并包含用户的认证信息或其他用户状态。用户每次发出请求时,都需要携带这个Token,通常是在HTTP头中,如Authorization头。
  • Token是自包含的,可以包含所有用户验证所需的信息,这样就减少了对数据库的查询需求,并允许更容易地在服务之间共享。

JWT (JSON Web Token)

  • JWT 是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地传输作为JSON对象的信息。它可以使用HMAC算法或RSA的公钥/私钥对进行数字签名。JWT由三部分组成:Header、Payload 和 Signature。
    • Header 包含Token的类型和加密算法。
    • Payload 包含声明(Claims),这些声明是关于实体(通常是用户)和其他数据的语句。
    • Signature 用于验证Token未被篡改,并确保Token的发送者是可信的。
  • JWTs可以用于无状态的认证,它们经常用于单页面应用程序(SPA),用于跨域认证和服务器到服务器的授权。

OAuth 2.0

  • OAuth 2.0 是一个授权框架,允许应用程序通过HTTP服务进行第三方认证,提供一个安全、标准化的方式来授权客户端访问服务器资源。它不直接进行身份验证,而是提供了一个流程来授予Token,这些Token可以用来访问服务器上的资源。
  • OAuth 2.0 定义了四种授权流程:授权码(用于有前端的应用程序)、隐式(适用于移动和Web应用程序)、资源所有者密码凭证(用于信任应用程序)和客户端凭证(用于应用程序间的授权)。
  • 一个常见的使用场景是登录功能,允许用户使用Google、Facebook或其他OAuth提供商的凭据来登录第三方应

用程序。

在实际使用中,这些技术经常结合使用。例如,OAuth 2.0 可能会用来授权用户并获取一个Token,这个Token可能是一个JWT,用来进行进一步的API请求。安全实践要求正确实现这些技术,以确保用户数据的安全和应用的可靠性。

posted @ 2023-10-25 18:23  Laravel自学开发  阅读(33)  评论(0编辑  收藏  举报