Asp-Net-Core开发笔记:给SwaggerUI加上登录保护功能

💡 原文中文,约5100字,阅读约需13分钟。
📝

内容提要

本文介绍了如何在SwaggerUI中添加登录验证的方法。作者使用了Basic Auth的方式来登录,并编写了一个自定义的SwaggerAuthenticationHandler中间件来实现登录。文章还介绍了如何配置Swagger和注册认证服务的代码。最后,作者提供了一种简单有效的解决方案来保证SwaggerUI的安全性。

🔎

延伸解读

为何不直接使用 .NET 8 的 MapSwagger().RequireAut

文章指出,.NET 8 新增的 MapSwagger().RequireAuthorization 方法虽然能保护 Swagger UI,但存在明显局限:它只支持通过 Postman、curl 等工具携带 Authorization 头请求,在浏览器中直接访问会返回 401,无法弹出登录框。因此作者选择自定义 Basic Auth 中间件,以兼容浏览器交互,提升开发调试体验。

Basic Auth 中间件的实现要点与注意事项

中间件通过判断请求路径是否以 /swagger 开头来触发认证,若认证失败则返回 401 并设置 WWW-Authenticate: Basic 响应头,从而让浏览器弹出登录框。作者提醒,如果修改了 Swagger UI 的默认路径,需同步调整中间件中的路径判断,或将其提取为通用配置,避免硬编码。

认证方案的可配置化与扩展性

自定义的 SwaggerAuthenticationHandler 从请求头解析 Basic Auth 凭证,并与配置中的用户名密码比对。作者将凭证放在配置中,通过 IOptions<T> 注入,避免硬编码,也可改用数据库存储。此外,认证方案名称通过静态类 AuthSchemes 管理,减少硬编码,便于维护。

❓

Q&A

如何在SwaggerUI中添加登录验证?

可以通过编写自定义的SwaggerAuthenticationHandler中间件,并使用Basic Auth方式进行登录来实现。

SwaggerBasicAuth中间件的主要功能是什么?

SwaggerBasicAuth中间件负责身份认证,如果认证失败则返回401状态码并弹出输入框。

如何配置Swagger以支持登录验证?

需要在配置文件中添加app.UseMiddleware<SwaggerBasicAuthMiddleware>(),并注册认证服务。

SwaggerAuthenticationHandler是如何工作的?

SwaggerAuthenticationHandler从请求头中读取用户名和密码进行验证,并返回认证结果。

在注册认证服务时如何添加自定义认证方案?

可以使用AddScheme方法添加自定义的认证方案,例如SwaggerAuthenticationHandler。

使用Basic Auth进行SwaggerUI登录的安全性如何?

通过本文提供的方法,可以在项目发布后访问SwaggerUI,同时保证一定的安全性。

🏷️

标签

➡️

继续阅读