1

我正在使用 micronaut 实现一个 API 网关。网关的职责之一是处理用户身份验证。我想使用外部 IdP 对用户进行身份验证,然后将 JWT 令牌传播到下游服务。我不希望 micronaut 生成自己的令牌,而是希望使用 IdP 生成的令牌。

我的网关服务的安全配置与此处描述的类似: https ://guides.micronaut.io/latest/micronaut-oauth2-okta-gradle-java.html

简而言之:

  security:
    authentication: idtoken 
    oauth2:
      clients:
        provider: 
          client-secret: '${OAUTH_CLIENT_SECRET:yyy}' 
          client-id: '${OAUTH_CLIENT_ID:xxx}' 
          openid:
            issuer: '${OIDC_ISSUER_DOMAIN}/oauth2' 
    endpoints:
      logout:
        get-allowed: true 

成功验证后,我将 JWT 作为 cookie 并可以使用它来授权我的请求。直到现在,一切都像魅力一样。

IdP 发行的代币有效期短,这是预期的行为。我希望 JWT 的寿命很短,并使用刷新令牌获得新的。我正在寻找一种在 micronaut 中实现刷新令牌流的方法。

完美的解决方案如下:

  • 成功认证后,JWT 和刷新令牌都作为 cookie 返回,
  • 如果网关收到带有过期 JWT 的请求,它会使用刷新令牌自动获取新请求,
  • 新的 JWT(如果发布了新的刷新令牌)被设置为 cookie。

第一个问题是如何配置 micronaut 以将刷新令牌返回给调用者(就像它返回 JWT 一样)。可以返回由 micronaut 生成的刷新令牌(例如在 cookie 中),但我没有找到让外部 IdP 生成的刷新令牌的方法。

第二个问题是是否可以将 micronaut 配置为自动执行完整的刷新令牌流(这似乎是一个非常标准的问题)。或者也许有另一个库可以用来实现这个目标?

我会很感激任何建议。

4

0 回答 0