1
wunonglin 2022-03-17 12:16:27 +08:00
Token != JWT
session 存 localStorage ,用的时候带到 header ,后端从 header 取,去 redis 验证,成功返回内容,失败返回 401 或 403 |
2
xiaopc 2022-03-17 12:39:28 +08:00
CSRF Token 可以在前端统一拦截请求添加
JWT 一般是无状态的;对于改密,可以在 JWT 里加上密码 hash ,请求时验证,这样就变成(某种意义上)有状态的 JWT 了 LocalStorage 也可以存 Session ,JWT 也可以存 Cookies 最终选什么方案要看目的是什么 |
3
CEBBCAT 2022-03-17 12:50:49 +08:00
@xiaopc “可以在 JWT 里加上密码 hash”
前两天正好看到一个问答,说,因为 JWT 的非加密性质,将(即使是 hash 后的)用户信息包含在 payload 中是危险的,因为攻击可以以离线的方式进行 Ref https://security.stackexchange.com/a/229873 |
6
xiaopc 2022-03-17 14:03:28 +08:00 via iPhone
@CEBBCAT …照这么说,服务端也不应该存密码 hash ,因为万一被入侵就「可以以离线的方式进行」爆破密码咯?
不要听风就是雨,真有爆破疑虑那 JWT 签名密钥还能爆破呢 实在不放心就用密码最后更新时间咯 |
7
hongfs 2022-03-17 15:16:30 +08:00
JWT 是不需要经过数据库验证的,所以单点登录、踢出是不太方便的。
我们业务是生成随机 token 然后存 Redis 去验证。 |
9
CEBBCAT 2022-03-17 22:43:39 +08:00
@xiaopc 怎么上来就呛声?吃了炮药?服务端目前业内推荐的密码存储方式是存加盐 hash ,这样将强迫攻击者为每个用户进行一轮穷举。说回 JWT ,一是 JWT 支持非对称加密,二是可以使用加盐的思路防止攻击者查表直接逆向
希望你已经阅读了别人随附的参考链接 |
11
xuanbg 2022-03-18 07:01:36 +08:00
JWT 的适用场景是只需要对用户身份做简单验证。因为 Token 本身携带了用户信息,且验证是通过密钥而非数据库进行,所以这种无状态的特性在分布式系统上面用起来就很方便。譬如一个服务端成百上千、用户数非常庞大的 APP ,JWT 这种机制就最好不过了。
但是,JWT 这种优点也是其最大的缺点。你要是搞一个后台管理系统,有上千项权限需要配置,那 JWT 就是你的噩梦。你必须搞一个保存在服务端的有状态的 Token ,来达成对 Token 的状态的实时管理。 |