【问题标题】:Quarkus, Keycloak and OIDC token refreshQuarkus、Keycloak 和 OIDC 令牌刷新
【发布时间】:2020-08-14 17:16:39
【问题描述】:

我目前正在开发具有多个 Quarkus 服务和 Keycloak RBAC 的 PoC。像魅力一样工作,轻松引导并开始实现功能。

但是我遇到了一个我无法解决的问题。想象一下:

  1. 用户访问受保护的服务
  2. quarkus-oidc扩展通过HTTP重定向获取令牌,cookie中的JWT持续30分钟
  3. 用户通过身份验证并返回到 Web 应用程序
  4. 用户在应用程序中工作,填写表格和数据
  5. 数据由 JWT 丰富的 REST 调用存储(我们通过 hibernate-validator 进行验证)
  6. 用户再次工作,耗时超过 30 分钟
  7. 想要存储另一个条目,但步骤 3 中的令牌现已过期,API 调用失败
  8. 用户不会高兴,我也不高兴

可能的解决方法:

  1. 让 JWT 的持续时间超过当前的 30 分钟,但这只会推迟问题并打开一些安全门
  2. 将用户的输入存储在本地存储中,以便稍后在令牌刷新后恢复(我们也会这样做,以免丢失用户的工作)
  3. 在用户不知情的情况下在 JS 中“静默”刷新令牌。有没有最佳做法?
  4. 我错过了一些重要的东西,现在互联网告诉我一个更好的应用程序架构。

感谢互联网!

【问题讨论】:

标签: jwt keycloak openid-connect quarkus


【解决方案1】:

重复第 3 步。在 Quarkus 1.5.0 中添加 quarkus.oidc.token.refresh-expired=true 将刷新 ID 令牌,如果刷新授权成功,用户会话将延长

【讨论】:

【解决方案2】:

对于这样的用例,我更喜欢 JWT 的反向。我将用户数据保存在共享数据服务(Infinispan 或 Redis 等数据网格)中。以便此数据由用户键入并可用。我在共享数据服务中控制该数据的 TTL。

它可以特定于某个应用,也可以在少数应用之间共享。它确实带来了一些耦合,但 JWT 属性结构也是如此。

对于 Quarkus,有一个 Infinispan 客户端集成、一个 Hazelcast 客户端、mongodb 和 AWS dynamoDB。你可以带其他图书馆。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-28
    • 2021-01-22
    • 2018-03-29
    • 2019-04-21
    • 2020-07-17
    • 2021-05-13
    • 2021-01-29
    • 2019-01-18
    相关资源
    最近更新 更多