authentication - 如何让 Swagger UI 让我提供身份验证标头?
问题描述
我使用 Luminus,连同 reitit 和 swagger-ui 来生成一个页面,让我试用我的 Luminus API。我可以输入我的 API 请求正文并提交以测试我的 API。
现在我已经使用好友添加了身份验证,并且我的 API 需要在请求的标头中传递一个令牌,否则它会拒绝该请求,因为它是被禁止的。
我试图让“授权”标题字段神奇地出现在我的 UI 中,以便我可以输入 JWT 令牌字符串并测试我的 API。对于使用 reitit 创建 API 的任何人来说,这一定是一个非常普遍的要求,但我不知道该怎么做。我四处寻找,发现了这个 reitit 问题页面,其中包括文本......
标头参数被声明为小写字符串 {:headers {"authorization" string?}},这将与 Ring 提供给我们的完全匹配。(仍然可以使用 HTTP-Header-Case 获取文档。)
...并建议以下设置...
:get {:summary "list offers"
:parameters
{:headers
{"authorization" string?}}
... etc
这样做并没有让我通过任何方式进行身份验证。所以,我找到了这个讨论并通过在上述路线中添加以下内容来编辑我的路线:summary 和 :parameters...
:middleware [authenticated?]
:swagger {:security [:apiKey]}
...看起来我在正确的轨道上,但我仍然无法在 auth 标头中输入我的令牌。
正如我所说,一切都在使用 curl ......只是那个招摇并没有显示任何添加身份验证头的方法。有人知道如何让 Swagger UI 在这种情况下发挥作用吗?
如果 reitit 不支持这一点,那么人们如何使用 Swagger UI 来处理经过身份验证的请求?
任何帮助,将不胜感激!
解决方案
好的。解决了。
在我的 API 路由的根部(封装了我可能最终使用此身份验证的所有路由),我添加了 :securityDefinitions。
["/api"
{:swagger {:id ::api
:securityDefinitions {:apiAuth
{:type "apiKey"
:name "Authorization"
:in "header"
}}}
具体路线内:
:middleware [authenticated?]
:swagger {:security [{:apiAuth []}]}
推荐阅读
- google-drive-api - 如何使用 C# 从 Google Drive 下载二进制文件
- javascript - 多边形上的边界线
- c++ - 如何为模板参数创建模板特化
- python - 指定主机时 FastAPI/uvicorn 不起作用
- angular-material - 为什么有些角度材质颜色输入有颜色输入,而另一些则没有?
- python - 尝试迭代采样,同时提供对所有先前采样步骤的访问
- c# - 添加项目引用和 nuget 提要时 Docker 构建失败
- c# - 用于映射表的 ASP.NET Core 导航属性
- java - 如 Javadoc 中所述,无法使用 @JsonCreator 正确反序列化 JSON
- python - 蛮力解决方案返回 Project Euler 问题 31 的错误答案