将应用程序身份验证添加到 Swagger UI

Posted

技术标签:

【中文标题】将应用程序身份验证添加到 Swagger UI【英文标题】:Adding the application autehntication to Swagger UI 【发布时间】:2018-12-13 18:56:30 【问题描述】:

我有集成 JWT 身份验证的 Spring Boot 应用程序。

为了认证,用户需要向/login发送一个带有用户名和密码的POST请求,然后他得到一个带有"token": "BEARER SOME_TOKEN" 的JSON响应。

在我招摇的 UI 中,当我单击“试用”并执行请求时,发送的请求没有任何令牌。

问题 - 有没有办法查询登录请求并将授权令牌添加到 Swagger UI 请求?

【问题讨论】:

【参考方案1】:

在这种情况下,我们可以在定义 SwaggerUIBundle 时使用index.html 中的这两个拦截器来拦截令牌并将它们添加到所有请求中:

            const ui = SwaggerUIBundle(
                ...
                responseInterceptor:
                    function (response) 
                        if (response.obj.access_token) 
                            console.log(response.obj.access_token)
                            const token = response.obj.access_token;
                            localStorage.setItem("token", token)
                        

                        return response;
                    ,
                requestInterceptor:
                    function (request) 
                        request.headers.Authorization = "Bearer " + localStorage.getItem("token");
                        return request;
                
           

responseInterceptor 捕获响应,如果它包含字段“token”,它会将其保存在本地存储中。 requestInterceptor 使用本地存储中的值在您从 swagger-ui 进行的每个调用中添加 Authorization 标头。

此修复适用于使用 v3 的 swagger-ui:

   <script src="https://unpkg.com/swagger-ui-dist@3.12.1/swagger-ui-standalone-preset.js"></script>
   <script src="https://unpkg.com/swagger-ui-dist@3.12.1/swagger-ui-bundle.js"></script>

【讨论】:

以上是关于将应用程序身份验证添加到 Swagger UI的主要内容,如果未能解决你的问题,请参考以下文章

使用 JWT Bearer 令牌进行身份验证 Swagger

Swagger UI 将身份验证令牌传递给标头中的 API 调用

迁移到 Swashbuckle.AspNetCore 版本 5 时,Swagger UI 中的不记名身份验证

如何在 Swagger-ui 中显示 Spring Security 用户名密码身份验证过滤器 url?

[第二篇]如何在ASP.Net Core的生产环境中使用OAuth保护swagger ui

使用 swagger ui 的 Azure Functions 广告身份验证说未找到 redirect.html