Quarkus,Keycloak和OIDC令牌刷新

时间:2020-04-30 10:54:30

标签: jwt keycloak openid-connect quarkus

我目前正在使用多个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. 我错过了重要的事情,现在互联网告诉我应用程序的架构更好。

谢谢您的上网!

2 个答案:

答案 0 :(得分:2)

重新执行步骤3。在Quarkus 1.5.0中,如果刷新授权成功,则添加quarkus.oidc.token.refresh-expired=true将刷新ID令牌并扩展用户会话

答案 1 :(得分:0)

对于此类用例,我倾向于偏向于JWT。我将用户数据保留在共享数据服务(如Infinispan或Redis的数据网格)中。这样,该数据就可以由用户输入并可用。我确实在共享数据服务中控制了该数据的TTL。

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

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