我想使用 jwt 令牌向我的应用程序添加身份验证。
每次我向服务器发送请求时,我都会附加服务器创建的令牌。
我受伤了,这种在标头中发送令牌的安全方法吗?如果有人访问我的计算机并在 devtools 选项卡中检查我的网络并看到我的令牌,他可以使用令牌模拟请求并控制用户数据。
这是常见的情况吗?以及窃取和破解 jwt 令牌的方法?
是的,将令牌附加到标头是很常见的。它看起来像这样:
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
Run Code Online (Sandbox Code Playgroud)
当然有人可以进入您的计算机并检查令牌。但通常您的计算机也有某种身份验证来登录。与手机一样,几乎每个人都有某种密码。
存储令牌的一个好方法是 httpOnly cookie。使用此标志 javascript 无法读取客户端的 cookie。它使得 XSS 攻击更难获取令牌。
JWT 的问题是它们有一个过期日期,并且在到达该日期之前它们一直有效。假设您登录网页并获取一些令牌。现在有人偷了你的令牌。您注销并删除设备上的令牌。
现在的问题是令牌被盗但仍然有效,因此攻击者可以使用它。
此时,从技术上讲,攻击者就是您,因为他拥有包含已保存数据的令牌。
您在这里可以做的是创建黑名单。如果您注销,则会将您的令牌放入黑名单。每当有人尝试访问需要令牌的内容时,您首先检查该令牌是否在黑名单内,如果是则拒绝该请求。
对于黑名单,我建议使用像 redis 这样的缓存来快速访问。