Asp-Net-Core开发笔记:给SwaggerUI加上登录保护功能
内容提要
本文介绍了如何在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,同时保证一定的安全性。