我没有用 JWT ,可能是没有太理解它,然后自己写了一个无状态安全验证,从客户端发起的那种,就是用户账号的一些信息(用户名、盐巴、过期时间等)拿出来加密然后 base64 后添加到 http header 发到服务端,然后服务端解密验证账号信息是否没问题,然后再处理此请求。
但是现在又有了一个新产品,确实也可以继续按照原有的思路那套来,但这次想换换,看看有没有工业级的现成的库可以满足我的要求?
1
dyv9 237 天前 via Android
连加密和散列这些词汇在表达时都不做区分的话设计出来的方案大概率是有漏洞的,在客户端是不容易做到加密又同时能安全地保存私钥,在客户端要保存私钥可能还是用 U 盾加密狗这种可拿走放心的方案。
|
2
cgglyle 237 天前 1
Spring Boot Security and Spring Authorization service.
Spring Authorization Service 会提供 OAuth2 功能。OAuth2 提供多种通信是验证机制,本质上也是你说 JWT ,只不过不用你亲手去写了,配置好就行。 会在用户登录时签发 Token ,在之后前端使用 Token 过验证,Token 过期后用刷新令牌重新申请 Token ,基本上保证好 SSL 在登录时不出现问题。 |
3
Belmode 237 天前
都是差不多的,可以试试这个整合包: Sa-Token
|
4
nnegier OP |
5
Belmode 230 天前
@nnegier #4 重放攻击行为本质上和 token 没有必然关系。防御手段其实有很多,一般常见的:
1 、使用随机数或者时间戳,加上请求参数 hash 后的值 一起发送给服务端,保证在允许的时间误差内,防止重放。 2 、 一次性的 token 。这个不是说是用户鉴权用的那个 token 串,而是针对某些特殊业务、特殊的接口,在使用前,需要单独获取一次 token ,然后拿这个 token 去请求(和 csrf 的防御类似),安全性高 3 、限流,对某些特殊业务、接口,限制用户的操作次数和操作频率()。 4 、more etc. 如果请求频率过高,那就是 CC 攻击了,这种直接根据请求特征 ban ip 就行了。 现实生产上,一般都是组合使用的,不会说哪种好,那种坏只用一种。另外,如何真的需要开发一些比较敏感的接口,一定要在请求中加时间戳+加密!这个可以参考微信服务的的 AES 请求参数认证,是个很好的例子。 |