认识
一、认识
基于 Token
的认证 通常使用 JSON Web Token(JWT)
来代替传统的 Session ID
。JWT
是一种自包含的令牌,其中存储了用户的身份信息和一些其他的元数据。它是一种 无状态 的认证方式,通常用于分布式应用、API
认证等场景。
基于 JWT Token
认证 是一个 无状态认证, JWT
本身包含了所有的用户信息,服务器不需要存储会话信息,减轻了服务器压力。支持跨域请求,适合微服务架构和移动应用(Mobile App
)使用。支持灵活的授权机制(如基于角色的访问控制 RBAC
)。适用于 单页应用(SPA
) 和 移动应用,易于与 API
配合使用。但是, JWT
的存储通常在客户端,由于其包含用户信息,如果存储不当,可能会引发 XSS
攻击等安全问题。JWT
过期后,需要重新登录或者通过 Refresh Token
来获取新的 Token
。Refresh Token
需要额外管理,增加了实现复杂度。另外,JWT
存储在 LocalStorage
或 Cookie
中时,可能会遭到劫持(如 CSRF
攻击或 XSS
攻击)。
在 JWT(JSON Web Token)
认证模式下,主要有两种常见的 Token
存储方式:一种是服务端将 Token
存储在 Cookie
中,另一种是服务端将 Token
返回给前端,由前端将 Token
存储在 LocalStorage
或 SessionStorage
中。这两种方式各有利弊,适用于不同的场景。
二、工作流
-
用户提交用户名和密码给后端服务器。
-
后端验证用户身份后,生成一个
JWT
,该JWT
包含用户的基本信息(如用户ID
、过期时间等)。 -
后端将
JWT
返回给客户端,客户端将其存储在LocalStorage
或SessionStorage
(对于前端应用)或Cookie
(对于传统Web
应用)中。 -
客户端每次发送请求时,将
JWT
放入请求的Authorization
头中(格式为Bearer <token>
)。 -
服务器验证
JWT
的有效性(如签名和过期时间),若有效,则通过Token
识别用户身份。
三、实现方案
在 JWT(JSON Web Token)
认证模式下,主要有两种常见的 Token
存储方式:一种是服务端将 Token
存储在 Cookie
中,另一种是服务端将 Token
返回给前端,由前端将 Token
存储在 LocalStorage
或 SessionStorage
中。这两种方式各有利弊,适用于不同的场景。
3.1 存储到 Cookie
当用户登录成功后,服务端会生成一个 JWT
,并将其设置在响应的 Set-Cookie
头中,并返回给客户端。Token
存储在 Cookie
中,并带有 HttpOnly
和 Secure
属性(如果是 HTTPS
网站),这些属性可以增强安全性。浏览器会在每次发送请求时自动将 Cookie
中的 Token
附加在请求头中。
3.2 存储到 Storage
当用户登录成功后,服务端会生成一个 JWT Token
,将其返回给前端。前端应用将该 Token
存储在 LocalStorage
或 SessionStorage
中,通常会存储在浏览器的 LocalStorage
或 SessionStorage
中。每次前端请求时,需要手动将 Token
添加到请求头部(通常是 Authorization: Bearer <token>
)。