【问题标题】:Grails spring-security-ldap caching caching with Redis使用 Redis 进行 Grails spring-security-ldap 缓存
【发布时间】:2018-10-12 05:47:36
【问题描述】:

新手问题,请耐心等待......

目前我有一个 Grails 2.4.4 应用程序,它使用 spring-security-ldap 2.0.1 通过 OpenLdap 服务器对 + 授权用户进行身份验证。

LDAP 人员担心,如果在迁移到生产环境时不缓存此应用程序,可能会影响 LDAP 服务器的性能。他们建议考虑使用 Redis 作为用户的应用程序级缓存,b4 访问 LDAP 服务器。

我想在深入 POC 之前获得一些指示,确保我从正确的路径开始:

i) 我简要查看了 Grail org 的“Grails 1 和 2 插件”,当我搜索 Redis 时出现了几个插件...哪些插件实际上与我想要的内容相关达到?

ii) 假设我已将 Redis 缓存集成到我的 Grails,我如何/在哪里告诉 spring-security-ldap 首先查看 Redis 缓存,然后 b4 访问 Ldap 服务器?

提前感谢任何信息/指南..

【问题讨论】:

  • 哦,忘了说,最好我们不想要用户持久化的数据库实现,只需要 LDAP 和 Redis 进行缓存。
  • 我没有足够的信息来给出完整的答案,但我已经将这个插件用于 Redis 并取得了很大的成功grails.org/plugin/redis?skipRedirect=true,至于自定义登录,我想你d 扩展 grails.plugin.springsecurity.LoginController 并通过检查你的 redis 缓存来覆盖 auth 方法,如果没有填充调用 super auth

标签: grails redis ldap spring-security-ldap


【解决方案1】:

这里有一些建议,因为您不是在寻找现成的解决方案:

  • 缓存任何类型的身份验证都是重大的安全故障,因为黑客将能够利用这一点绕过在您的 LDAP 解决方案中实施的一些规则,例如暴力保护(例如在 N 个错误密码后阻止帐户)

  • 为了处理 LDAP 服务器端的负载,您可以调整会话令牌过期时间(JSESSIONID 或 JWT,取决于 Spring 安全性的配置方式)。例如,如果令牌过期时间为 1 小时,则每个用户每小时只会收到 1 个请求。

  • 您可以使用刷新令牌机制来更新会话令牌,而无需查询 LDAP。在这种情况下,每个用户的每个设备只有 1 个 LDAP 请求,这可能是可以接受的。这里是how to do it using Grails JWT 在本文档中,您将看到 REDDIS can be used to store token,这与您的初始解决方案非常相关

【讨论】:

  • 感谢您的建议!由于所关注的应用程序不是高度敏感的,我可能仍会继续手动缓存身份验证(而且我已经完成了一半... :-\ )如果发生对缓存的暴力攻击将是一个问题,我也许可以手动滚动以阻止暴力攻击。哎呀,听起来已经做了很多工作。
  • 但出于好奇,我查看了 Spring-Security-Rest 插件文档alvarosanchez.github.io/grails-spring-security-rest/1.5.4/docs/…。一些问题只是为了澄清:i)只要在本地存储第一个 LDAP 身份验证和令牌后,LDAP 服务器就不会被调用? ii) 如果未调用 LDAP 服务器,令牌基本流如何防止暴力尝试(以及其他 LDAP 规则强制执行)?
  • JWT 令牌受到强力保护,因为它使用私钥加密,比任何密码策略都复杂得多,例如会话 cookie。这是一些关于它的讨论security.stackexchange.com/questions/87119/…
猜你喜欢
  • 2015-05-04
  • 2011-08-15
  • 2014-09-20
  • 2019-11-13
  • 2011-09-23
  • 2017-02-22
  • 2014-04-01
  • 2018-03-02
  • 2018-08-09
相关资源
最近更新 更多