# JWT令牌
# 1.简述
JWT全称为JSON Web Token,是一种用于身份验证的开放标准。它是一个基于JSON格式的安全令牌,主要用于在网络上传输声明或者用户身份信息。JWT通常被用作API的认证方式,以及跨域身份验证。
JWT令牌由三部分组成,分别是头部(Header)、载荷(Payload)和签名(Signature)。头部包含了令牌使用的加密算法信息,载荷包含了所需传输的用户信息,签名用于保证令牌的完整性和真实性,防止令牌被篡改。
# 2.JWT特点
- 可以跨语言、跨平台使用,因为它是基于JSON标准的。
- 可以直接嵌入到HTTP请求头中,方便传输和验证。
- 令牌的有效期可以通过设置过期时间来进行控制,提高了安全性。
- 由于令牌中包含了用户信息,因此可以避免频繁查询数据库的情况出现,提高了系统的性能。
# 3.使用流程
-
用户认证请求
客户端(如浏览器、App)向服务器发送认证请求,通常是提交用户名和密码等凭证。 -
服务器验证与生成Token
服务器收到请求后,验证凭证是否正确。若验证通过,服务器会生成一个JWT Token,该Token包含用户身份信息(如用户ID、角色等)的JSON数据,并使用密钥进行签名(确保Token的完整性和真实性)。 -
服务器返回Token给客户端
服务器将生成的JWT Token返回给客户端,通常是通过HTTP响应的头部(如Authorization字段)或响应体返回。 -
客户端存储Token
客户端收到Token后,将其存储在本地,常见的存储方式有浏览器的本地存储(localStorage/sessionStorage)或移动端的本地数据库。 -
客户端携带Token发送请求
后续客户端在访问需要认证的资源时,会在HTTP请求的头部(如Authorization字段)中携带JWT Token。 -
服务器验证Token
服务器收到请求后,会检查请求头中的Token。首先验证Token的签名是否有效(确保Token未被篡改),然后解析Token中的信息,确认用户身份和权限。 -
服务器处理请求并返回响应
若Token验证通过,服务器会根据请求处理业务逻辑,并返回相应的结果给客户端;若验证失败,服务器会返回错误信息(如401 Unauthorized)。
**总结:**简单来说,JWT的使用流程就是客户端通过认证获取Token,然后在后续请求中携带Token,服务器通过验证Token来确认用户身份和权限,从而实现身份认证和授权的功能。
首次访问通过认证获取Token,后续用Token替代重复认证,既保证安全又提升效率。同一个用户端首次通过登录注册拿到token后,后续访问只需在请求头带上token,服务器验证通过就能正常访问资源,无需重复登录。
JWT Token存储在HTTP的泄露风险:
网络传输风险
中间人攻击:Token在HTTP请求头中以明文(或Base64编码)传输,若网络环境不安全(如公共WiFi),攻击者可通过抓包工具获取Token,进而利用其伪造身份访问资源。存储安全问题
本地存储漏洞:客户端将Token存储在localStorage/sessionStorage或本地数据库,若设备被恶意软件感染,Token可能被窃取,导致账户被盗用。服务器端隐患
日志泄露:服务器日志若记录了完整请求信息,Token会被存储在日志中,若日志管理不善,可能被内部人员或攻击者获取。
风险规避建议
使用<u>HTTPS</u>:强制所有请求通过HTTPS传输,利用SSL/TLS加密协议保护Token安全。
短期Token有效期:设置Token的过期时间(如1小时),到期后需重新认证,降低Token被盗用的风险。
存储优化:移动端可使用更安全的存储方式(如iOS的Keychain、Android的Keystore),浏览器端避免将敏感信息存入localStorage。注解:<u>HTTPS</u>通过SSL/TLS加密协议保护Token的核心原理是加密传输和身份验证,具体如下:
- 建立安全连接
握手阶段:客户端与服务器通过SSL/TLS协议进行“握手”,协商加密算法(如AES、RSA)和会话密钥。此过程中,服务器会发送证书(含公钥),客户端验证证书有效性,确保连接到合法服务器。- 加密Token传输
对称加密:握手完成后,双方使用协商好的会话密钥对HTTP请求/响应进行加密。Token作为请求头的一部分(如Authorization字段),会被加密后传输,即使数据被拦截,攻击者也无法获取Token明文。- 身份验证与完整性保护
数字签名:服务器证书包含数字签名,客户端可通过CA机构验证其真实性,防止中间人伪造服务器身份窃取Token。同时,TLS协议通过哈希算法(如SHA-256)确保数据完整性,若Token在传输中被篡改,客户端可检测到并拒绝接收。- 会话管理
SSL/TLS会话机制:通过会话ID和加密上下文,确保Token仅在安全会话中有效。一旦会话结束,Token的传输安全性将依赖于客户端的存储保护,因此建议结合短期Token有效期和安全存储方式(如Keychain、Keystore)进一步增强安全性。
简单来说,SSL/TLS为Token传输构建了“加密隧道”,从传输安全、身份验证到数据完整性全方位保护,降低Token泄露风险。