如何在ASP.Net Core的生产环境中保护swagger ui

2024-06-20 22:58

本文主要是介绍如何在ASP.Net Core的生产环境中保护swagger ui,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

当您使用 dotnet 5 创建 WebApi 项目时,项目中会默认集成 swagger。

如下所示。

正如您在上面图片中看到的那样,开发人员仅在开发环境中很好地添加了swagger。所以你只能在开发模式下看到swagger页面。

但是,如果您想在生产环境中访问 swagger 页面,但同时又希望不是每个人都应该能够看到您的 api 端点,该怎么办呢?

在本教程中,我将阐述如何使用一些身份验证机制来保护生产环境中的 swagger 定义。

在下面的实例中,我将使用基本身份验证,所以让我们开始吧。

使用 Visual Studio 或 VScode 创建 一个webapi 项目。当然这里我使用的是vs2022,

让我们按 F5 运行 webapi,并导航到此 URL https://localhost:5001/swagger/index.html 来查看下swagger页面

现在添加一个名为 SwaggerBasicAuthMiddleware 的类并添加如下代码。

public class SwaggerBasicAuthMiddleware
{
private readonly RequestDelegate next;
public SwaggerBasicAuthMiddleware(RequestDelegate next)
{this.next = next;
}
public async Task InvokeAsync(HttpContext context){if (context.Request.Path.StartsWithSegments("/swagger")){string authHeader = context.Request.Headers["Authorization"];if (authHeader != null && authHeader.StartsWith("Basic ")){// Get the credentials from request headervar header = AuthenticationHeaderValue.Parse(authHeader);var inBytes = Convert.FromBase64String(header.Parameter);var credentials = Encoding.UTF8.GetString(inBytes).Split(':');var username = credentials[0];var password = credentials[1];// validate credentialsif (username.Equals("swagger")&& password.Equals("swagger")){await next.Invoke(context).ConfigureAwait(false);return;}}context.Response.Headers["WWW-Authenticate"] = "Basic";context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;}else{await next.Invoke(context).ConfigureAwait(false);}}}

为简单起见,我使用的是硬编码凭据验证,但同样可以增强以从数据库中使用它。

像这样创建一个扩展方法。

public static IApplicationBuilder UseSwaggerAuthorized(this IApplicationBuilder builder)
{return builder.UseMiddleware<SwaggerBasicAuthMiddleware>();
}

从 env.IsDevelopment() 块中删除 swagger 部分并将其放在外面。在 startup.cs 中添加中间件,如下所示。

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
...
app.UseAuthorization();
app.UseSwaggerAuthorized();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "SecureSwagger v1"));
...
}

确保在 UseSwagger() 和 UseSwaggerUI() 调用之前添加了 UseSwaggerAuthorized(),以便在访问 swagger ui 之前调用身份验证中间件。

有了这些代码更改,我们就可以运行我们的应用程序了。

按 F5 运行,您可以看到 swagger 页面正在加载,但浏览器正在询问凭据。

让我先尝试一些无效的凭据。我将分别使用“Test”和“Test”作为用户名和密码。

按下登录按钮后,它将验证凭据并在错误时返回同一页面。

如果按取消,它将显示 401 错误页面。

现在我将尝试使用有效的凭据。

可以看到swagger加载成功。

验证凭据后成功显示 Swagger 页面。

这篇关于如何在ASP.Net Core的生产环境中保护swagger ui的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1079498

相关文章

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

WinForm跨线程访问UI及UI卡死的解决方案

《WinForm跨线程访问UI及UI卡死的解决方案》在WinForm开发过程中,跨线程访问UI控件和界面卡死是常见的技术难题,由于Windows窗体应用程序的UI控件默认只能在主线程(UI线程)上操作... 目录前言正文案例1:直接线程操作(无UI访问)案例2:BeginInvoke访问UI(错误用法)案例

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

SQLite3 在嵌入式C环境中存储音频/视频文件的最优方案

《SQLite3在嵌入式C环境中存储音频/视频文件的最优方案》本文探讨了SQLite3在嵌入式C环境中存储音视频文件的优化方案,推荐采用文件路径存储结合元数据管理,兼顾效率与资源限制,小文件可使用B... 目录SQLite3 在嵌入式C环境中存储音频/视频文件的专业方案一、存储策略选择1. 直接存储 vs

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

python常见环境管理工具超全解析

《python常见环境管理工具超全解析》在Python开发中,管理多个项目及其依赖项通常是一个挑战,下面:本文主要介绍python常见环境管理工具的相关资料,文中通过代码介绍的非常详细,需要的朋友... 目录1. conda2. pip3. uvuv 工具自动创建和管理环境的特点4. setup.py5.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

Swagger在java中的运用及常见问题解决

《Swagger在java中的运用及常见问题解决》Swagger插件是一款深受Java开发者喜爱的工具,它在前后端分离的开发模式下发挥着重要作用,:本文主要介绍Swagger在java中的运用及常... 目录前言1. Swagger 的主要功能1.1 交互式 API 文档1.2 客户端 SDK 生成1.3