Cookie、Session、Token、JWT详细介绍

news2024/9/24 19:20:31

Cookie、Session、Token详细介绍

🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀
通过这么长时间的学习,对客户端和服务器进行交互的三个重要方式做出总结,一起学习,如有疏漏或者错误,望批评指正!!!
😍 🥰 😘 😗 😙 😚 😋 😛 😝 😜 🤪 🤨 🧐 🤓 😎 🤩 🥳🙂 🙃 😉🤗 🤔 🤭😃 😄 😁 😆

文章目录

  • Cookie、Session、Token详细介绍
    • 一、Cookie
      • 1、什么是Cookie[饼干]
      • 2、Cookie的属性组成
      • 3、Cookie在浏览器的传输
    • 二、Session
      • 1、什么是Session
      • 2、Session的作用
      • 3、session 认证流程:
      • 4、Cookie和Session的不同
    • 三、Token
      • 1、什么是Token
      • 2、Token的优点:
      • 3、Token的身份验证流程:
    • 四、Token 和 Session 的区别
    • 五、JWT
      • 1、什么是JWT
      • 2、JWT作用
        • 1.授权
        • 2.信息交换
      • 3、基于JWT认证
      • 4、常见的加密方法
    • 六、使用注意事项
      • 1、:cookie:Cookie
      • 2、Session
      • 3、Token
      • 4、JWT

一、Cookie

1、什么是Cookie[饼干]

首先我们要明确,HTTP(Hypertext Transfer Protocol)是一种无状态的协议。这意味着每个HTTP请求都是独立的,服务器不会存储关于客户端(浏览器)的任何信息。当客户端发送请求时,服务器仅处理该请求并发送响应,然后立即忘记该请求。下一次请求来自同一客户端时,服务器无法知道前面的请求或与之相关的任何状态信息。

为了处理有状态的需求,引入了一些机制,如Cookie和会话(Session)。使用这些机制,服务器可以在客户端和服务器之间传递数据,以维护会话状态。Cookie是一种在客户端存储数据的机制,而会话是一种在服务器端存储数据的机制。通过将会话标识符存储在Cookie中或通过URL重写等方式将其传递,服务器可以识别客户端并恢复相关的状态信息。

  • Cookie存储在客户端:Cookie是一种在客户端(通常是Web浏览器)存储数据的机制,由服务器发送给浏览器,并在浏览器的Cookie存储中保存。它通常用于在无状态的HTTP协议中跟踪和维护用户会话状态。Cookie可以存储在浏览器的内存中(会话Cookie),也可以存储在用户的硬盘上(持久Cookie)。
  • 携带Cookie进行访问:当用户访问一个网站时,服务器可以通过在HTTP响应中包含Set-Cookie头来发送一个或多个Cookie给浏览器。浏览器会将这些Cookie存储起来,并在随后的请求中自动将它们包含在Cookie头中发送回服务器。服务器可以根据这些Cookie来识别用户、维护用户状态和提供个性化的功能。
  • Cookie是不可跨域的:每个Cookie都是和单一的域名进行绑定,在其他的域名下是没有办法进行使用的,但是一级域名和二级域名之间是能够共享使用的,这种共享Cookie的设置需要通过合适的域名配置和相应的浏览器支持,以确保Cookie在不同的子域名之间共享。

2、Cookie的属性组成

属性说明
name=value键值对,设置 Cookie 的名称及相对应的值,都必须是字符串类型 - 如果值为 Unicode 字符,需要为字符编码。 - 如果值为二进制数据,则需要使用 BASE64 编码。
domain指定 cookie 所属域名,默认是当前域名
path指定 cookie 在哪个路径(路由)下生效,默认是 ‘/’。 如果设置为 /abc,则只有 /abc 下的路由可以访问到该 cookie,如:/abc/read
maxAgecookie 失效的时间,单位秒。如果为整数,则该 cookie 在 maxAge 秒后失效。如果为负数,该 cookie 为临时 cookie ,关闭浏览器即失效,浏览器也不会以任何形式保存该 cookie 。如果为 0,表示删除该 cookie 。默认为 -1。 - 比 expires 好用
expires过期时间,在设置的某个时间点后该 cookie 就会失效。 一般浏览器的 cookie 都是默认储存的,当关闭浏览器结束这个会话的时候,这个 cookie 也就会被删除
secure该 cookie 是否仅被使用安全协议传输。安全协议有 HTTPS,SSL等,在网络上传输数据之前先将数据加密。默认为false。 当 secure 值为 true 时,cookie 在 HTTP 中是无效,在 HTTPS 中才有效。
httpOnly如果给某个 cookie 设置了 httpOnly 属性,则无法通过 JS 脚本 读取到该 cookie 的信息,但还是能通过 Application 中手动修改 cookie,所以只是在一定程度上可以防止 XSS 攻击,不是绝对的安全

3、Cookie在浏览器的传输

  • 我们在发送HTTP请求时,发现游览器将我们的cookie都进行了携带(注意:游览器只会携带在当前请求的url中包含了该cookie中path值的cookie),并且是以key:value的形式进行表示的。多个cookie用;进行隔开。
  • Cookie就是一些数据,用于存储服务器返回给客服端的信息,客户端进行保存。在下一次访问该网站时,客户端会将保存的cookie一同发给服务器,服务器再利用cookie进行一些操作。利用cookie我们就可以实现自动登录,保存游览历史,身份验证等功能。

小案例:

你怎么证明你是学校的学生?

你 ---- 学校

  1. 发票 学校给你开发票
  2. 学校登记 学校标记你过来了

一个网站,怎么证明你来过?

客户端 ----- 服务器

  1. 服务端给客户端一个 信件,客户端下次访问服务端带上信件就可以;cookie
  2. 服务器登记你过来了,下次你来的时候我来匹配你。session

二、Session

Session也称会话,基于Cookie实现,是另外一种记录服务器和客户端会话状态的机制

1、什么是Session

  • Session是一种在网络通信中用于跟踪用户状态的机制。在Web应用程序中,服务器使用Session来存储和管理与特定用户相关的信息,以便在用户的连续请求之间保持状态。
  • 当用户访问一个使用Session的网站时,服务器会为该用户创建一个唯一的Session ID,并将这个ID与用户的会话相关联。这个Session ID通常会被存储在Cookie中,以便在用户的每个请求中发送给服务器。服务器根据Session ID来查找相应的会话数据,以便为每个用户提供个性化的服务和保持用户状态。

2、Session的作用

  • 状态管理:Session允许服务器在用户请求之间跟踪和管理用户的状态。通过Session,服务器可以存储和检索与特定用户相关的信息,如登录状态、购物车内容、用户首选项等。这样,在用户的不同请求之间,服务器可以获取并维持用户的状态,提供一致性和个性化的体验。
  • 用户身份验证:Session常用于用户身份验证。当用户通过用户名和密码登录后,服务器会创建一个Session并将登录状态相关的信息存储在Session中。随后,服务器可以根据Session验证用户的身份,而不需要用户每次请求都重新登录。
  • 数据共享:通过Session,服务器可以在不同的页面和请求之间共享数据。服务器可以将数据存储在Session中,然后在用户的不同请求中进行访问和修改。这对于在应用程序中共享数据、传递数据或在多个页面之间共享上下文非常有用。

3、session 认证流程:

  1. 用户访问网站并提供登录凭据(用户名和密码)。
  2. 第一次登录请求,服务器验证用户提供的凭据是否正确。如果凭据有效,服务器创建一个唯一的Session ID。
  3. 服务器将用户的身份信息和其他相关数据存储在服务器端的Session存储中,通常是在内存或数据库中。
  4. 服务器将Session ID发送给客户端,通常是通过将Session ID存储在Cookie中,并在响应中返回给客户端。
  5. 客户端的浏览器接收到响应,并存储Session ID的Cookie。
  6. 在用户的后续请求中,浏览器会自动将存储的Cookie中的Session ID发送给服务器。
  7. 服务器接收到带有Session ID的请求,通过该ID找到对应的Session数据。
  8. 服务器验证Session ID的有效性,并根据Session数据判断用户的身份和权限。
  9. 根据用户的身份和权限,服务器处理请求并返回相应的内容。
  10. 用户继续进行其他操作,每次请求都包含相同的Session ID。
  11. 当用户退出登录或会话过期时,服务器会销毁相关的Session数据,使Session失效。
  12. 如果用户再次访问网站,需要重新进行认证,重复上述步骤。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-d08OmrpK-1688282648467)(E:\Typora\images\typora-user-images\image-20230702103537903.png)]

4、Cookie和Session的不同

SessionID是重要的组成部分,它将Cookie和Seesion连接到一起,共同参与客户端和服务器的通信,验证登录状态

  1. 存储位置:Cookie是存储在客户端(浏览器)中的小型文本文件,而Session数据存储在服务器端。
  2. 数据容量:Cookie的数据容量较小,通常限制在几KB,而Session可以存储更大量的数据,因为它存储在服务器上。
  3. 安全性:由于Cookie存储在客户端,它们可能会受到一些安全风险,如被窃取或篡改。为了增加安全性,可以对Cookie进行加密或使用安全标志,如Secure和HttpOnly。相比之下,Session数据存储在服务器端,更难以被窃取,但仍然需要注意服务器的安全性。
  4. 生命周期:Cookie可以设置不同的过期时间,可以是会话级别的(关闭浏览器时过期)或具有固定的过期日期。而Session通常在用户关闭浏览器或超过一定时间不活动时过期,也可以由开发人员手动设置过期时间。
  5. 性能开销:由于Session数据存储在服务器上,每个用户的Session都需要占用服务器资源。相比之下,Cookie的存储和传输对服务器的负担较小。

三、Token

1、什么是Token

Token是在计算机科学和网络安全中使用的一种令牌机制,用于验证身份和授权访问。

在身份验证方面,Token通常指的是身份验证令牌,它是一个表示用户身份的字符串或数据结构。当用户进行身份验证时,系统会颁发一个Token给用户。该Token可以包含有关用户身份的信息,例如用户ID、角色、权限等。用户在后续请求中使用Token来证明自己的身份,而不需要再次提供用户名和密码。常见的身份验证Token包括JSON Web Token(JWT)和OAuth2授权令牌。

在授权访问方面,Token用于验证客户端的授权权限,以获取对特定资源或服务的访问权限。当客户端请求访问受保护的资源时,它需要提供有效的Token来证明自己有权访问该资源。服务器会验证Token的有效性和权限,并根据结果决定是否允许客户端的访问。常见的授权访问Token包括OAuth2访问令牌和OpenID Connect身份令牌。

Token的常见组成:

Token的组成可以因使用的标准或实现方式而有所不同。以下是常见的Token组成部分:

  • 头部(Header):Token的头部通常是一个包含有关Token类型和加密算法的JSON对象。例如,JWT的头部可能包含"alg"表示使用的签名算法(如HMAC、RSA)和"typ"表示Token类型(如JWT)。

    • {
        "alg": "HS256",
        "typ": "JWT"
      }
      
  • 载荷(Payload):Token的载荷是一个包含有关用户或其他实体的相关信息的JSON对象。它可以包含标准的声明(如用户ID、角色、权限等)和自定义的声明。Payload是Token中存储数据的主要部分。

    • 请注意,默认情况下JWT是未加密的,任何人都可以解读其内容,因此不要构建隐私信息字段,存放保密信息,以防止信息泄露。
      
  • 签名(Signature):签名是用于验证Token的完整性和真实性的部分。签名通常是使用私钥(对称加密)或公钥(非对称加密)对头部和载荷进行签名生成的。在验证Token时,接收方使用相应的密钥来验证签名是否有效,以确保Token未被篡改。

    • HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(claims), secret)    ==>   签名hash
      

这些部分通常以一定的方式进行编码和组合,以生成最终的Token字符串。不同的标准和实现可能在编码格式、分隔符、加密算法等方面有所差异。例如,JWT(JSON Web Token)使用Base64编码来表示头部和载荷,并使用点号(.)来分隔各个部分,形成最终的Token字符串。

总结起来,Token的组成通常包括头部、载荷和签名部分,每个部分都承载着不同的信息和功能。这种结构化的Token设计使得在验证和解析Token时更加方便和可靠。

2、Token的优点:

  1. 无需在每个请求中传输用户名和密码,减少了敏感信息的传输风险。
  2. 支持跨平台和跨域访问,使得不同系统之间的集成更加灵活。
  3. 服务端无状态化、可扩展性好可以轻松地进行扩展和撤销,适应不同的业务需求。

需要注意的是,Token的安全性非常重要。在设计和实现Token机制时,需要采取适当的安全措施,如使用加密算法对Token进行签名和验证,限制Token的使用范围和有效期限,并进行适当的访问控制和权限管理。

3、Token的身份验证流程:

Token身份验证的流程可以概括为以下步骤:

  1. 用户提供身份凭据:用户向身份验证系统提供身份凭据,通常是用户名密码。这可以是登录表单、API请求或其他方式。

  2. 身份验证请求:身份验证系统收到用户的身份凭据后,进行验证请求。这可能涉及与存储用户凭据的数据库或身份提供者进行比对验证。

  3. 生成Token:如果用户的身份验证成功,身份验证系统会生成一个Token作为身份验证结果。Token可以是JSON Web Token(JWT)、OAuth2访问令牌或其他类型的令牌。

  4. 发送Token给客户端:身份验证系统将生成的Token发送给客户端(如浏览器、移动应用程序等)。通常,Token会作为响应的一部分返回给客户端,可以放置在响应的头部、Cookie或响应体中。

  5. 客户端存储Token:客户端接收到Token后,将其存储在安全的位置,例如本地存储[localStorage]、内存或Cookie中。

  6. 后续请求中发送Token:客户端在后续的请求中,将Token作为身份验证凭据的一部分发送给服务器。这通常是通过在请求的头部(如Authorization头部)或查询参数中携带Token来实现。

  7. 服务器验证Token:服务器在接收到带有Token的请求后,使用相应的密钥(对称或非对称)来验证Token的完整性和真实性。它会解析Token的内容,验证签名,并检查Token的有效期、权限等声明。

  8. 验证结果返回:服务器根据Token的验证结果,决定是否允许用户访问请求的资源或执行特定操作。如果验证成功,服务器会响应请求并提供所需的数据或操作;如果验证失败,服务器会拒绝访问,并返回相应的错误响应。
    在这里插入图片描述

  • 每次请求都会携带token,把token放在Http请求的请求头里
  • 服务端不用存放token数据,只需要解析验证从客户端带有Token的请求,用解析Token的计算时间换区session的存储空间,减轻了服务器的压力

四、Token 和 Session 的区别

Token和Session是用于在Web应用程序中进行身份验证和授权的两种不同的机制,它们之间有以下详细的区别:

  1. 存储位置:
  • Token:Token是存储在客户端(如浏览器、移动应用程序)中的,通常以Cookie或自定义的头部方式传递给服务器。
  • Session:Session是存储在服务器端的数据结构,通常存储在服务器的内存或数据库中。
  1. 数据存储方式:
  • Token:Token中包含了用户的身份信息和其他必要的数据,通常使用一种标准的数据格式(如JSON Web Token)进行编码和解码。
  • Session:Session中存储了用户的状态和相关数据,可以在服务器端进行读取和修改。
  1. 存储容量:
  • Token:Token的存储容量较小,因为它需要在每个请求中传递。通常只包含有关身份验证和授权的必要信息。
  • Session:Session的存储容量较大,因为数据存储在服务器端,可以存储更多的用户状态和相关数据。
  1. 安全性:
  • Token:Token需要采取安全措施,如加密和签名,以确保其完整性和真实性。可以使用标准的加密算法和签名机制进行验证。
  • Session:Session相对较安全,因为数据存储在服务器端,对客户端是不可见的。但需要保护好Session ID,以防止会话劫持等攻击。
  1. 跨域支持:
  • Token:Token可以在跨域之间共享,并且适用于跨平台和跨域的访问控制。
  • Session:Session通常限制在单个域名或子域,不容易在跨域环境下进行共享。
  1. 扩展性:
  • Token:Token机制更具扩展性,适用于构建分布式系统和微服务架构,因为每个服务可以独立验证和授权Token。
  • Session:Session机制通常用于单体应用程序,因为Session存储在服务器端,不容易在不同服务之间共享和验证。
  1. 生命周期和状态管理:
  • Token:Token通常有一个固定的有效期,可以设置长短不同的过期时间,由客户端管理和维护。
  • Session:Session的生命周期由服务器管理,可以根据特定的策略(如过期时间、空闲时间等)来管理和维护。
  • Session是一种记录服务器和客户端会话状态的机制,使服务器状态化。Token是令牌,就是客户端访问服务器资源的通行证,它使服务器无状态化,不存储会话信息和数据
  • Token作为身份认证的安全性高于Session,每一个请求都有唯一签名并且能够防止监听;Session要依赖于链路层来保证客户端和服务器的会话安全。然而他们并不矛盾,都是在确保客户端和服务器的正常和安全通讯。在使用Token时,如果希望实现有状态,可以增加Session在服务器保存一些需要的状态
  • 通过Session进行用户认证就是把用户信息存储到Session中,得到唯一的SeesionID,由于SessionID是不确定的,可以认为是相对安全的。Token提供的是认证和授权,用户认证和应用授权,并且Token是唯一的,只能是本用户,也只能是本应用不能转接到其他应用。进行用户认证时Token通常有一个固定的有效期,可以设置长短不同的过期时间。用户可以在有效期内重复使用Token,而无需每次请求都进行身份验证;而Session的生命周期由服务器管理,可以根据配置设置过期时间或者空闲时间来控制Session的有效期。用户关闭浏览器或超过一定时间不活动时,Session通常会过期。

五、JWT

1、什么是JWT

JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. This information can be verified and trusted because it is digitally signed. JWTs can be signed using a secret (with the HMAC algorithm) or a public/private key pair using RSA or ECDSA

官方解释

官网地址:https://jwt.io/introduction/

翻译:JSON Web令牌(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。由于此信息是经过数字签名的,因此可以被验证和信任。可以使用秘密(使用HMAC算法)或使用RSA或ECDSA的公用/专用密钥对对JWT进行签名。

2、JWT作用

1.授权

这是使用JWT的最常见方案。一旦用户登录,每个后续请求将包括JWT,从而允许用户访问该令牌允许的路由,服务和资源。单点登录是今广泛使用JWT的一项功能。因为它的开销很小并且可以在不同的域中轻松使用

2.信息交换

JSON Web Token是在各方之间安全地传输信息的好方法。因为可以对JWT进行签名(例如,使用公钥/私钥对),所以您可以确保发件人是他们所说的人。此外,由于签名是使用标头和有效负载计算的,因此您还可以验证内容是否遭到篡改。

3、基于JWT认证

JWT(JSON Web Token)是一种用于认证和授权的开放标准,允许在网络应用程序之间安全地传输信息。它由三个部分组成:头部(Header)、载荷(Payload)和签名(Signature)。每个部分都是Base64编码的JSON字符串,并通过句点(.)进行分隔。这种结构使得JWT非常适合在客户端和服务器之间进行安全通信。

JWT的工作流程如下

  • 用户向服务器发送其认证凭证(例如用户名和密码)。
  • 服务器验证用户的凭证,并生成一个包含用户信息和其他相关数据的JWT。
  • 服务器将JWT返回给客户端。
  • 客户端将JWT存储在本地(通常是在浏览器的本地存储或Cookie中)。
  • 在后续请求中,客户端将JWT附加到请求头中,作为认证的凭证。
  • 服务器接收请求并从JWT中提取认证信息,以验证用户的身份和权限。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sC8UKvYA-1688287955903)(E:\Typora\images\typora-user-images\image-20230702162909444.png)]

JWT具有以下特点

  1. 自包含:载荷部分包含了用户的信息以及相关数据,无需进一步查询数据库。
  2. 无状态:服务器不需要在后端存储任何关于用户会话的信息,因为JWT本身包含了所有必要的信息。
  3. 安全:JWT使用签名来验证其完整性,防止篡改和伪造。
  4. 可扩展:可以通过在载荷中添加自定义字段来扩展JWT的功能。
  5. 跨平台:JWT可以在不同的编程语言和平台之间轻松交换和解析。

JWT的一个常见用例是在Web应用程序中用作身份验证(Authentication)和授权(Authorization)机制。在身份验证方面,JWT能够验证用户的身份,而在授权方面,它可以包含用户的角色和权限信息,使得服务器可以根据JWT的内容控制用户能够访问的资源和功能。

需要注意的是,JWT并不适合用于敏感信息的存储,因为虽然JWT的内容可以加密,但签名仍然是公开的,任何人都可以解码和查看JWT的内容。因此,敏感信息应该使用其他方式进行加密和处理。

4、常见的加密方法

  1. 对称加密算法:

    • AES(Advanced Encryption Standard):目前最广泛使用的对称加密算法之一,支持128位、192位和256位密钥长度。
    • DES(Data Encryption Standard):早期的对称加密算法,使用56位密钥长度,现已被AES所取代。
    • 3DES(Triple Data Encryption Standard):DES的加强版,通过多次DES算法的迭代来提高安全性。
  2. 非对称加密算法:

    • RSA(Rivest-Shamir-Adleman):最常用的非对称加密算法之一,基于数论的复杂性问题,用于数据加密和数字签名。
    • ECC(Elliptic Curve Cryptography):基于椭圆曲线理论的非对称加密算法,提供与RSA相当的安全性,但使用更短的密钥长度,适用于资源受限的环境。
  3. 散列函数(哈希函数):

    • MD5(Message Digest Algorithm 5):常用的散列函数之一,生成128位(16字节)哈希值,但因为存在安全性问题,已不推荐用于加密应用。
    • SHA(Secure Hash Algorithm)系列:SHA-1、SHA-256、SHA-384、SHA-512等,根据输出长度的不同,生成不同位数的哈希值,广泛用于密码校验、数据完整性验证等领域。
    • HMAC(Hash-based Message Authentication Code):结合散列函数和密钥的算法,用于生成带有密钥认证的哈希值。

这些加密算法在不同的应用场景和需求中有不同的适用性。在选择加密算法时,需要考虑安全性、性能、资源消耗以及特定需求(如加密强度、密钥长度、支持性等)等因素。此外,随着技术的不断发展,加密算法也会不断演进和更新,以应对新的安全挑战。因此,建议在实际使用中参考最新的安全标准和推荐。

六、使用注意事项

1、🍪Cookie

  1. 安全性:使用安全的传输协议(例如HTTPS)来加密Cookie的传输,防止中间人攻击;对敏感信息进行加密或使用加密的Cookie。使用前需要验证合法性,同时使用HttpOnly在一定程度上提高安全性。
  2. 隐私保护:仅存储必要的信息,避免存储敏感个人信息,采用适当的数据保护措施,如数据加密或匿名化处理,向用户提供透明的隐私政策,明确说明使用Cookie的目的和方式,并提供相关的选择和控制权。
  3. 跨域问题🍪cookie无法跨域
  4. Cookie大小和数量:过多或过大的Cookie可能会增加网络传输的负担,并可能导致性能问题。尽量减少 cookie 的体积,能存储的数据量不能超过 4kb;一个浏览器针对一个网站最多存 20 个Cookie,浏览器一般只允许存放 300 个Cookie.
  5. 使用范围:cookie主要在网页端使用

2、Session

  1. 占用率高:因为Session存储在服务器里面,在有大量用户同时在线的的情况发生时,就会占用服务器的很多内存,服务器需要保证内存足够,所以要到期清理Session
  2. 跨域问题:在跨域场景下,Session共享和传递可能面临限制。需要了解跨域策略,并采取适当的解决方案,如使用跨域资源共享(CORS)或代理等。
  3. 关联Cookie问题:SessionID 是存储在 cookie 中的,假如浏览器禁止 cookie 或不支持 cookie 。 一般会把 SessionID 跟在 url 参数后面即重写 url,所以 session 不一定非得需要靠 cookie 实现

3、Token

  1. 安全性:Token作为身份验证凭证,使用安全的传输协议(如HTTPS)传递Token,以防止中间人攻击。对Token进行适当的加密或签名,确保其完整性和防止篡改。避免在请求参数或URL中明文传递Token,而是使用请求头或其他安全方式传递。
  2. 防止Token泄露::避免在不安全的环境中存储Token,如浏览器的本地存储或Cookie中。使用安全的存储方式,如HTTP-Only Cookie或安全的本地存储。设置适当的Token过期时间,定期刷新Token,并且在用户注销或超时时使Token失效。考虑使用单一用途的短期Token,以降低泄露风险。
  3. 令牌管理:合适的生成算法和密钥长度来生成Token。使用黑名单或撤销机制来处理被盗用或不再需要的Token。考虑使用令牌刷新机制,避免频繁用户登录或Token失效导致的用户体验问题。
  4. 缓存机制:可以使用Redis等非关系型数据库进行缓存处理,提高查询速度
  5. 完全由应用管理,避免同源策略;同时移动端常用token

4、JWT

  1. 安全性:JWT作为身份验证凭证,需要采取措施确保其安全性:
    • 使用安全的传输协议(如HTTPS)传递JWT,以防止中间人攻击。
    • 对JWT进行适当的签名(使用HMAC或RSA等算法),确保其完整性和防止篡改。
    • 选择安全的密钥管理和密钥长度,以防止密钥泄露和暴力破解。
  2. 避免敏感信息:尽量避免将敏感个人信息直接存储在JWT中。JWT通常用于身份验证和授权,而不是用于存储大量用户信息。
  3. 有效期管理:为JWT设置合理的过期时间,避免过长的有效期导致安全风险,同时避免频繁的JWT刷新操作影响性能。
  4. 颁发和验证:确保JWT的颁发和验证过程安全可靠:
    • 在颁发JWT时,验证用户身份和权限,并使用安全的密钥签名JWT。
    • 在验证JWT时,验证JWT的签名、过期时间和其他声明,以确保JWT的有效性和合法性。
  5. JWT的大小:JWT的大小会影响网络传输和存储开销,尽量避免在JWT中存储过多的数据。考虑使用较小的声明和选择合适的编码方式,如Base64URL编码。
  6. 令牌撤销:如果需要撤销或失效某个JWT,需要建立相应的撤销机制。这可以是使用黑名单(如存储已撤销的JWT的数据库或缓存)或者使用短期的JWT,通过更频繁的刷新来实现。
  7. 高负载环境下的性能:在高负载环境下,JWT的验证和处理可能会成为性能瓶颈。可以采取一些优化措施,如缓存已验证的JWT或使用无状态的验证方式(如使用JWK集合)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/710353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3的setup语法糖下的defineEmit、defineExpose、defineProps函数

Vue3的setup语法糖下的defineEmit、defineExpose、defineProps父子传值 setup语法糖 setup作为vue3的新增生命周期hooks,其替代了vue2的beforeCreate、created,注意setup的执行时间是位于beforeCreate之前,熟悉vue2的都知道,在b…

C++——详解类模板

纵有疾风起,人生不言弃。本文篇幅较长,如有错误请不吝赐教,感谢支持。 💬文章目录 一.类模板①类模板的定义与实例化②类模板的实例化③类模板的具体化(特化、特例化)1️⃣完全具体化2️⃣部分具体化3️⃣…

xxl-job源码改造集成:适配opengauss数据、适配单点登录等

目录 一、摘要 二、集成方案 三、集成步骤 3.1 springboot集成xxl-job 3.2 适配高斯数据库(postgresql) 3.3 页面集成 3.4 登录集成 3.5 接口集成 四、部署 一、摘要 公司现在打算重构产品,将原来的quartz替换成xxl-job,主要因为quartz不能动态…

多通道分离与合并

1、分离 2、合并 Mat img imread("F:/testMap/plan.png");Mat imgs[3];split(img,imgs);//分离Mat img0,img1,img2;img0 imgs[0];img1 imgs[1]; img2 imgs[2];Mat img_H;merge(imgs,3,img_H);//合并vector<Mat> imgsV; imgsV.push_back(img0);imgsV.push_b…

5.8.3 TCP连接管理(一)TCP连接建立

5.8.3 TCP连接管理&#xff08;一&#xff09;TCP连接建立 我们知道TCP是面向连接的传输协议&#xff0c;在传输连接的建立和释放是每一次面向连接通信必不可少的过程&#xff0c;因此传输连接的管理使得传输连接的建立和释放的过程都能够正常的进行。 一、使用Wireshark查看…

UE4/5用GeneratedDynamicMeshActor网格细分静态网格体【用的是ue5建模模式的box,其他的没有作用】

目录 制作 逻辑&#xff1a; 效果&#xff1a; ​编辑 代码&#xff1a; 制作 前面和之前的流程一样&#xff0c;打开插件和继承GeneratedDynamicMeshActor创建一个蓝图&#xff1a; 逻辑&#xff1a; 两个函数对应了两种细分方法 上面的细分模式是&#xff1a;Loop细…

JupyterNotebook基本操作

目录 Jupyter notebook文件操作 创建文件 修改文件名 复制文件 移动文件 删除文件 上传文件 下载文件 Jupyter notebook单元格操作 内容类型 编辑模式 快捷键 对照表 命令模式 编辑模式 查看快捷键 进入Jupyter Notebook主界面“File”中 VSCode配置Jupyter…

Bootstrap 表单

文章目录 Bootstrap 表单表单布局垂直或基本表单内联表单水平表单支持的表单控件输入框&#xff08;Input&#xff09;文本框&#xff08;Textarea&#xff09;复选框&#xff08;Checkbox&#xff09;和单选框&#xff08;Radio&#xff09;选择框&#xff08;Select&#xff…

【Go】Go 语言教程--介绍(一)

文章目录 Go 语言特色Go 语言用途第一个 Go 程序Go 语言环境安装UNIX/Linux/Mac OS X, 和 FreeBSD 安装Windows 系统下安装安装测试 Go 是一个开源的编程语言&#xff0c;它能让构造简单、可靠且高效的软件变得容易。 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompso…

文生图技术stable diffusion入门实战

文章目录 0. 环境搭建0.1 Windows0.1.1 git环境安装0.1.2 python 环境搭建0.1.2.1 配置pip国内镜像源 0.1.3 stable diffusion环境搭建0.1.3.1 远程访问Stable diffusion 1. 基础知识1.1 Stable Diffusion Webui及基础参数1.2 参数说明 0. 环境搭建 0.1 Windows 0.1.1 git环境…

电子时钟制作(瑞萨RA)(3)----使用J-Link烧写程序到瑞萨芯片

概述 这一节主要讲解如何使用J-Link对瑞萨RA芯片进行烧录。 硬件准备 首先需要准备一个开发板&#xff0c;这里我准备的是芯片型号R7FA2E1A72DFL的开发板&#xff1a; 视频教程 https://www.bilibili.com/video/BV1kX4y1v7tL/ 电子时钟制作(瑞萨RA)----(2)使用串口进行程序…

初学spring5(八)整合MyBatis

学习回顾&#xff1a;初学spring5&#xff08;七&#xff09;AOP就这么简单 一、步骤 1、导入相关jar包 junit <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version> </dependency>m…

如何使用RobotFramework编写好的测试用例

目录 概述 命名 测试套件命名 测试用例命名 关键字命名 setup和teardown的命名 文档 测试套件文档 测试用例文档 用户关键字文档 测试套件结构 测试用例结构 工作流测试 数据驱动测试 用户关键字 变量 变量的命名 传参和返回值 避免使用Sleep关键字 我们AT…

算法设计与分析 课程期末复习简记(更新中)

网络流 下面是本章需要掌握的知识 • 流量⽹络的相关概念 • 最⼤流的概念 • 最⼩割集合的概念 • Dinic有效算法的步骤 • 会⼿推⼀个流量⽹络的最⼤流 下面对此依次进行复习 首先看流量网络的相关概念 上面是课程PPT中的定义&#xff0c;真是抽象 实际上&#xff0c;我们直接…

Maynor的博客专家成长之路——暨2023年中复盘

文章目录 博客专家成长之路——暨2023年中复盘前言念念不忘的博客专家每天只做三件事敲代码写博客健健身 我的感悟 不足之处未来&#xff1a;和CSDN共同成长最后 博客专家成长之路——暨2023年中复盘 前言 ​ 2023年不知不觉已经过去了半年有余&#xff0c;也是时候作年中复盘…

WEB界面测试

目录 前言&#xff1a; 摘要: WEB界面测试&#xff0c;最大的难度之一可能就是兼容性测试了 WEB界面测试&#xff0c;注重用户体验 WEB界面测试&#xff0c;注意用户的使用习惯 前言&#xff1a; Web界面测试是一种通过模拟用户与Web应用程序的交互来验证其功能和用户体验…

基于自然语言处理的多模态模型_综述

A Survey on Multimodal Large Language Models&#xff1b; 论文链接&#xff1a;https://arxiv.org/pdf/2306.13549.pdf 项目链接(实时更新最新论文&#xff0c;已获1.8K Stars)&#xff1a;https://github.com/BradyFU/Awesome-Multimodal-Large-Language-Models 研究背景 …

线程安全问题之原因及解决方案

线程安全问题 根本原因代码结构原子性解决方案&#xff1a;synchronized 内存可见性问题解决方案 volatile 指令重排序问题wait和notify判定一个代码是否线程安全&#xff0c;一定要具体问题具体分析!!! 根本原因 根本原因&#xff1a;多线程抢占式执行&#xff0c;随机调度。 …

ESP8266-NodeMCU搭建Arduino IDE开发环境

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、准备工作二、搭建步骤1.打开Arduino IDE 首选项2.打开Arduino IDE的“开发板管理器”3.在Arduino IDE的开发板菜单中找到“NodeMCU开发板”4.设置Arduino IDE的…

实验二:子程序设计实验

一、实验目的闻明找强的的掌握于程府的定又和调用方法掌握子程布的程库设计与调试方法 实验要求. 说明实现本实验需要掌握的知识及本实验害要的实验环境 二、实验要求了解萄单汇师培长程产没计与调武了解江编语子能店定义了解汇编语着子程序设计 实验内容 阐明实验具体内容及实…