Java 后端有没有好用的通信时验证账号的安全库?

218 天前
 nnegier

我没有用 JWT ,可能是没有太理解它,然后自己写了一个无状态安全验证,从客户端发起的那种,就是用户账号的一些信息(用户名、盐巴、过期时间等)拿出来加密然后 base64 后添加到 http header 发到服务端,然后服务端解密验证账号信息是否没问题,然后再处理此请求。

但是现在又有了一个新产品,确实也可以继续按照原有的思路那套来,但这次想换换,看看有没有工业级的现成的库可以满足我的要求?

1383 次点击
所在节点    程序员
5 条回复
dyv9
218 天前
连加密和散列这些词汇在表达时都不做区分的话设计出来的方案大概率是有漏洞的,在客户端是不容易做到加密又同时能安全地保存私钥,在客户端要保存私钥可能还是用 U 盾加密狗这种可拿走放心的方案。
cgglyle
218 天前
Spring Boot Security and Spring Authorization service.

Spring Authorization Service 会提供 OAuth2 功能。OAuth2 提供多种通信是验证机制,本质上也是你说 JWT ,只不过不用你亲手去写了,配置好就行。

会在用户登录时签发 Token ,在之后前端使用 Token 过验证,Token 过期后用刷新令牌重新申请 Token ,基本上保证好 SSL 在登录时不出现问题。
Belmode
218 天前
都是差不多的,可以试试这个整合包: Sa-Token
nnegier
214 天前
@dyv9
@cgglyle
@Belmode
但我仍存一个问题,JWT 的那个方式,token 由服务器生成,这个 token 被盗取重放攻击怎么办呢,短时间被塞入大量无效数据
Belmode
211 天前
@nnegier #4 重放攻击行为本质上和 token 没有必然关系。防御手段其实有很多,一般常见的:
1 、使用随机数或者时间戳,加上请求参数 hash 后的值 一起发送给服务端,保证在允许的时间误差内,防止重放。
2 、 一次性的 token 。这个不是说是用户鉴权用的那个 token 串,而是针对某些特殊业务、特殊的接口,在使用前,需要单独获取一次 token ,然后拿这个 token 去请求(和 csrf 的防御类似),安全性高
3 、限流,对某些特殊业务、接口,限制用户的操作次数和操作频率()。
4 、more etc.

如果请求频率过高,那就是 CC 攻击了,这种直接根据请求特征 ban ip 就行了。

现实生产上,一般都是组合使用的,不会说哪种好,那种坏只用一种。另外,如何真的需要开发一些比较敏感的接口,一定要在请求中加时间戳+加密!这个可以参考微信服务的的 AES 请求参数认证,是个很好的例子。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1028627

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX