V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nnegier
V2EX  ›  程序员

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

  •  
  •   nnegier · 29 天前 · 1204 次点击

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

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

    5 条回复    2024-04-07 21:40:35 +08:00
    dyv9
        1
    dyv9  
       29 天前 via Android
    连加密和散列这些词汇在表达时都不做区分的话设计出来的方案大概率是有漏洞的,在客户端是不容易做到加密又同时能安全地保存私钥,在客户端要保存私钥可能还是用 U 盾加密狗这种可拿走放心的方案。
    cgglyle
        2
    cgglyle  
       29 天前   ❤️ 1
    Spring Boot Security and Spring Authorization service.

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

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

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

    现实生产上,一般都是组合使用的,不会说哪种好,那种坏只用一种。另外,如何真的需要开发一些比较敏感的接口,一定要在请求中加时间戳+加密!这个可以参考微信服务的的 AES 请求参数认证,是个很好的例子。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1782 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 16:18 · PVG 00:18 · LAX 09:18 · JFK 12:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.