惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
G
Google Developers Blog
博客园 - 司徒正美
J
Java Code Geeks
aimingoo的专栏
aimingoo的专栏
A
About on SuperTechFans
博客园 - 三生石上(FineUI控件)
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
D
Docker
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
腾讯CDC
V
Visual Studio Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
Check Point Blog
M
MIT News - Artificial intelligence
Jina AI
Jina AI
I
InfoQ
雷峰网
雷峰网
The Cloudflare Blog
美团技术团队
Engineering at Meta
Engineering at Meta

博客园 - 宁静致远.

Hangfire 的 ASP.NET Core 应用程序始终运行在IIS上 DevExpress 无法打开WinForm设计窗体,报错: 类型 universe 无法解析程序集: System, Version=2.0.0.0 PowerDesigner参数设置 Hangfire 任务调度配置 雪花漂移ID,Yitter.IdGenerator 封装成一个适用于 ASP.NET Core 6.0 的服务组件 解决 Hangfire 中使用HttpClient 任务超时问题 TaskCanceledException: The request was canceled due to the configured HttpClient.Timeout of 100 seconds elapsing. ASP.NET Core API 自定义全局异常 Dapper模糊查询Like 删除重复记录,仅留一条 Task 多线程执行 使用Hangfire+.NET 6实现定时任务管理(推荐) 使用 IHttpClientFactory 处理请求和响应 Json 序列化,将对象序列化为Json字符串(此Json序列化,是“不安全的放松JSON转义”,即不会将物特殊符号和中文进行转码) 查询指定数据库中有全部表名,快速定位列名所在表 Sql 查询工具 Sql 数据库表查询 Json 列 显示实体之间的外键关系 调整PowerDesigner各种字体大小 工厂里常说的QC, IQC,IPQC,QA都是干什么的? appsettings.json launchSettings.json 发布 配置
Swagger 页面登录验证中间件(Basic认证)
宁静致远. · 2026-05-13 · via 博客园 - 宁静致远.

企业微信截图_17786521583540

1. Program.cs

// Configure the HTTP request pipeline.
//if (app.Environment.IsDevelopment())
{
    // 核心:注册Swagger登录验证中间件(必须在 UseSwagger 之前)
    app.UseMiddleware<SwaggerBasicAuthMiddleware>();
    app.UseSwagger();
    app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1"));
}

2. 中间件 SwaggerBasicAuthMiddleware

using System.Net;
using System.Text;

namespace WebApplicationIIS
{

    /// <summary>
    /// Swagger 页面登录验证中间件(Basic认证)
    /// </summary>
    public class SwaggerBasicAuthMiddleware
    {
        private readonly RequestDelegate _next;
        private readonly string _username;
        private readonly string _password;

        public SwaggerBasicAuthMiddleware(RequestDelegate next,IConfiguration configuration)
        {
            _next = next;
            // 从配置读取账号密码,避免硬编码
            _username = configuration.GetSection("AppSettings")["SwaggerAuth:Username"] ?? "admin";
            _password = configuration.GetSection("AppSettings")["SwaggerAuth:Password"] ?? "123456";
        }

        public async Task InvokeAsync(HttpContext context)
        {
            // 只拦截 Swagger 相关请求(/swagger、/swagger/index.html)
            if (context.Request.Path.StartsWithSegments("/swagger",StringComparison.OrdinalIgnoreCase))
            {
                // 1. 获取请求头中的认证信息
                string authHeader = context.Request.Headers["Authorization"];
                if (authHeader != null && authHeader.StartsWith("Basic ",StringComparison.OrdinalIgnoreCase))
                {
                    // 2. 解码账号密码
                    var encodedUsernamePassword = authHeader.Split(' ', 2, StringSplitOptions.RemoveEmptyEntries)[1]?.Trim();
                    var decodedUsernamePassword = Encoding.UTF8.GetString(Convert.FromBase64String(encodedUsernamePassword));
                    var username = decodedUsernamePassword.Split(':', 2)[0];
                    var password = decodedUsernamePassword.Split(':', 2)[1];

                    // 3. 验证账号密码
                    if (username.Equals(_username) && password.Equals(_password))
                    {
                        await _next(context);
                        return;
                    }
                }

                // 4. 未认证/认证失败:弹出登录弹窗
                context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
                context.Response.Headers.Append("WWW-Authenticate", "Basic realm=\"Swagger UI\"");
                return;
            }

            // 非Swagger请求,直接放行
            await _next(context);
        }
    }
}

3. appsetting.json

 "AppSettings": {
   "SiteName": "HangfireMRPWorkerService",
   "SwaggerAuth": {
     "Username": "admin",
     "Password": "@Lg123456$"
   }


 }