Jwt Quarkus、Key斗篷和OIDC令牌刷新

Jwt Quarkus、Key斗篷和OIDC令牌刷新,jwt,keycloak,openid-connect,quarkus,Jwt,Keycloak,Openid Connect,Quarkus,我目前正在使用多个Quarkus服务和KeyClope RBAC开发PoC。就像一个魅力,很容易引导和开始实施功能 但我遇到了一个我无法解决的问题。想象一下: 用户访问受保护的服务 quarkus oidc扩展不支持通过HTTP重定向获取令牌,cookie中的JWT持续30分钟 用户经过身份验证并返回到web应用程序 用户在应用程序中工作,填写表单和数据 数据由JWT丰富的REST调用存储(我们通过hibernate validator进行验证) 用户再次工作,时间超过30分钟 想要存储另一个条

我目前正在使用多个Quarkus服务和KeyClope RBAC开发PoC。就像一个魅力,很容易引导和开始实施功能

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

  • 用户访问受保护的服务
  • quarkus oidc
    扩展不支持通过HTTP重定向获取令牌,cookie中的JWT持续30分钟
  • 用户经过身份验证并返回到web应用程序
  • 用户在应用程序中工作,填写表单和数据
  • 数据由JWT丰富的REST调用存储(我们通过
    hibernate validator
    进行验证)
  • 用户再次工作,时间超过30分钟
  • 想要存储另一个条目,但步骤3中的令牌现在已过期,API调用失败
  • 用户不会高兴,所以我也不会
  • 可能的解决办法:

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

  • 感谢互联网!

    对于此类用例,我倾向于使用JWT的相反方式。我将用户数据保存在共享数据服务(Infinispan或Redis等数据网格)中。因此,这些数据由用户键入并可用。我在共享数据服务中控制该数据的TTL

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


    对于Quarkus,有Infinispan客户端集成、Hazelcast客户端集成、mongodb和AWS dynamoDB。您可以带来其他库。

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

    sed它,所以不能帮助它,但我知道keydape附带了一个JavaScript库。除此之外,它允许您轻松地执行选项3(在后台刷新令牌),请参阅仅供参考,它是此处添加的属性: