Asp-Net-Core开发笔记:给SwaggerUI加上登录保护功能 - 程序设计实验室

Asp-Net-Core开发笔记:给SwaggerUI加上登录保护功能 - 程序设计实验室

💡 原文中文,约4900字,阅读约需12分钟。
📝

内容提要

本文介绍了如何在SwaggerUI中实现登录验证,利用.NET 8的新特性MapSwagger().RequireAuthorization。通过自定义SwaggerAuthenticationHandler和Basic Auth方式,重构了登录认证中间件,主要逻辑在InvokeAsync方法中,验证请求路径并进行身份认证,返回401状态码时弹出输入框。同时,介绍了如何配置认证服务和处理用户名密码,以确保SwaggerUI的安全性。

🔎

延伸解读

为何需要自定义认证中间件

文章指出,.NET 8 的 MapSwagger().RequireAuthorization 虽然能保护 Swagger UI,但仅适用于携带 Authorization 头的工具,浏览器直接访问会返回 401,无法弹出登录框。因此作者选择重构自定义中间件,通过 Basic Auth 方式实现浏览器友好的登录验证,弥补了官方方案的不足。

中间件的工作机制与配置要点

SwaggerBasicAuthMiddleware 在 InvokeAsync 中检查请求路径是否以 /swagger 开头,若是则调用 context.AuthenticateAsync 进行认证。认证失败时返回 401 并设置 WWW-Authenticate: Basic 响应头,触发浏览器弹出输入框。文章提醒,若 SwaggerUI 路径变更,需同步修改中间件中的路径判断,或将其做成通用配置以避免硬编码。

认证方案注册与凭据管理

通过 AddScheme 方法注册自定义的 SwaggerAuthenticationHandler,并使用静态类 AuthSchemes 定义方案名称,避免硬编码。用户名和密码存放在配置中,通过 IOptions<T> 注入获取,也可改用数据库读取。这种设计将认证逻辑与配置分离,提升了安全性和可维护性。

❓

Q&A

如何在SwaggerUI中实现登录验证?

可以使用.NET 8的新特性MapSwagger().RequireAuthorization来实现登录验证,并通过自定义SwaggerAuthenticationHandler和Basic Auth方式重构登录认证中间件。

SwaggerAuthenticationHandler的主要功能是什么?

SwaggerAuthenticationHandler的主要功能是处理身份认证,验证请求路径并返回401状态码以提示用户输入凭证。

如何配置SwaggerUI的认证服务?

在配置认证服务时,可以使用AddScheme方法添加自定义认证方案,避免硬编码,并通过IOptions<T>获取用户名和密码。

InvokeAsync方法的作用是什么?

InvokeAsync方法用于判断请求路径是否以/swagger开头,并进行身份认证,如果认证失败则返回401状态码。

如何确保SwaggerUI的安全性?

通过将用户名和密码存放在配置中,并使用IOptions<T>获取,确保在代码中不硬编码,从而提高SwaggerUI的安全性。

使用Basic Auth方式进行登录的流程是怎样的?

使用Basic Auth方式时,用户的用户名和密码通过Authorization头传递,服务器解码后验证,如果验证失败则返回401状态码。

🏷️

标签

➡️

继续阅读