首页 > 解决方案 > 如何使用 JWT 正确验证 Quarkus / smallyre-JWT 的 openapi UI?

问题描述

我有一个 Quarkus 端点站起来。由 JWT 和角色保护。

它在邮递员中工作。(Header<Authorization, Bearer ey……>)

我查看并挣扎,发现我不能做一个典型的@Header@Parameter注释来公开这个 Authorization 标头——它踩踏了那个精确的值。“授权1”我可以暴露。但不是“授权”。

我在文件中有一个 jwt 配置选项application.YML。我现在在 UI 上获得了一个身份验证“挂锁”,但无论我在那里输入什么,都不会在“试用”模式下传递给 CURL 命令。

有没有人解决过这个问题?

application.yml部分:

  smallrye-openapi:
      ...
      jwt-bearer-format: JWT
      jwt-security-scheme-value: Bearer
      security-scheme: jwt

这些图像可能有用:

邮差——成功 SmallRye OpenAPI UI 验证 SmallRye OpenAPI UI Auth 标头未附加

标签: jwtopenapiquarkusmicroprofilesmallrye

解决方案


这不是一个真正的错误。您可以在 Quarkus 中指定一个配置,允许您将 JWT 令牌注入到来自 Swagger 的每个请求中。

您需要做一些工作才能完成此操作,因为 Swagger 事先不知道如何读取 JWT 令牌以及如何将其重用于后续调用。

以下是您可以用来使 Swagger 调用在 Quarkus 项目中工作的一种方法。

这里有一些东西要解压。

警告

这已经过测试,可以与 Quarkus 2.0.1.Final 一起使用。旧版本的 Quarkus 使用旧版本的 SmallRye,在呈现请求拦截器时存在错误。

  1. 在 Quarkusquarkus.swagger-ui.request-interceptor中使用此配置将 jwt 令牌注入 Swagger 的请求标头中。这个值进入你的application.properties. (请修改此配置以适合 yml 文件)

quarkus.swagger-ui.request-interceptor=function(req){var authToken=sessionStorage.getItem('authenticationToken');if(authToken){req.headers['Authorization']='Bearer'+authToken;}返回req ;}

  1. 现在转到您的 Swagger UI 并使用您使用的登录端点登录。这将返回 jwt 令牌。转到浏览器并将值输入到浏览器的会话存储中,键为“authenticationToken”

  2. 现在,当您点击任何要测试的端点时,Swagger 将使用request interceptor (在 1 中定义)从浏览器的会话存储中注入 JWT,您的调用将正常工作。


推荐阅读