【问题标题】:Spring Boot w/ KeyCloak and Redis session store带有 KeyCloak 和 Redis 会话存储的 Spring Boot
【发布时间】:2019-09-02 17:48:14
【问题描述】:

有人能建议如何配置 Spring Boot 应用程序以通过 KeyCloak 进行身份验证,然后使用 Redis 作为会话存储吗?我花了一天的时间在谷歌上搜索并对此进行了猛烈抨击,但我只是觉得自己没有取得任何进展。

我知道如何独立配置每一个 - 即我可以制作一个通过 KeyCloak 进行身份验证的启动应用程序,我还可以制作一个在 Redis 中保持会话的启动应用程序,但我没有让它们一起工作。这可能吗?似乎应该如此。或者这不是它应该如何工作的?

我认为我的工作 POC 会表现得像这样:

  1. 启动我的应用程序
  2. 访问某些通过 KeyCloak 强制登录的资源 - 已授予对资源的访问权限
  3. 重启我的应用
  4. 访问相同的资源,但现在不需要登录(因为会话在 Redis 中保持不变)

感谢您的任何建议。

【问题讨论】:

  • 有趣!第一个问题是,重启应用后再次获取登录表单有什么问题?现代浏览器可以记住您的用户名/密码。其次,我会想象 Spring boot 在哪里处理您的浏览器会话 id 并将其与 Keycloak AccessToken 对象或只是 refreshToken 相关联,因此在重新启动后,您的用户确实通过 refreshToken 获得新的 AccessToken 配置文件,并继续工作。
  • .. 你可以在简单的令牌过滤器中做到这一点,只需扩展 OncePerRequestFilter 并添加到 SecurityConfig 中的 http.addFilterBefore(yourFilter, UsernamePasswordAuthenticationFilter.class)。总体而言,Keycloak 很快就退出了。我们会在浏览器中检查过期时间,避免额外的 Keycloak 调用。不知道我有没有帮助:)
  • @DmitriAlgazin 感谢您的建议 - 我会试一试。至于为什么,真正的答案是我们在 Kubernetes 中部署了一组微服务,每个服务都可能运行许多实例。因此,目标是只允许其中一个建立会话,并在整个集群中使用该会话。否则每个实例都必须执行整个 KeyCloak 登录重定向 cha-cha。

标签: spring-boot redis keycloak


【解决方案1】:

好的 - 原来我只是没有注意。我没有正确使用访问/承载令牌。当请求中正确提供了不记名令牌时,无需保留 Spring 会话。

【讨论】:

    猜你喜欢
    • 2020-02-22
    • 2022-10-13
    • 2018-12-16
    • 2022-01-08
    • 2019-11-20
    • 2015-07-07
    • 2015-05-07
    • 2022-09-28
    • 2019-12-19
    相关资源
    最近更新 更多