• C#一行代码免写Web登录页:PicoServer 的 AddBasicAuth 中间件实战


    从一个项目说起

    最近做一个内部项目,麻雀虽小,五脏俱全:

    • WebSocket 实时通信
    • WebAPI 数据接口
    • 简单配置 Web 页面
    • 数据大屏 Web 页面
    • 公开的扫码页面

    全部跑在同一个现有域名下,不能另开新域名。认证方式也各不相同:

    类型 认证方式
    WebSocket 自定义 JSON 消息认证
    WebAPI 简单 Token
    简单配置页面 / 数据大屏 Basic Auth
    扫码页面 无需认证

    客户对需要认证的页面提了一个要求:简单点就行,浏览器弹个框输密码就够了,不用搞多华丽。

    先看最终效果,一行代码搞定:

    server.AddBasicAuth("/daping/", "admin", "123456");
    

    下面展开说。

    为什么挂在原有域名下

    项目本身已经有一个主域名,所有业务都在上面。新增的配置页面不能另开新域名(比如 config.xxx.com),必须挂在现有域名下的某个路径(比如 /daping/)。

    这样做的好处:

    • 统一域名:用户不需要记新地址,SSL 证书管理也简单
    • 方便运维:NGINX 只需要配置一次反代,后续加新路径不用改
    • 规则集中:认证逻辑写在代码里,和业务在一起

    Basic Auth 是什么

    HTTP 基本身份认证,HTTP/1.0 时代就存在的认证方式。大概流程:浏览器访问受保护路径 → 浏览器自动弹出登录框 → 用户输入用户名密码 → 后续请求自动带上认证信息,登录失败报401。

    核心价值:登录框是浏览器自带的,不需要你写任何前端代码。

    这个弹框长得不好看,但客户并不在乎这个,他只要“有个密码挡着就行”。现在有 OAuth、JWT 等更复杂的方案,但 Basic Auth 在简单场景下依然好用——内部工具、配置页面、临时加锁。客户要的就是“简单点”,正好合适。

    如果配置页面需要暴露在公网,前面加一层 NGINX 做 HTTPS 即可,PicoServer 作为胶水库不直接处理证书。

    项目中的完整用法

    var server = new WebAPIServer();
    
    // 一行代码:配置相关页面统一用 Basic Auth 保护,免认证子路径
    server.AddBasicAuth("/daping/", "admin", "123456","/daping/config");
    
    // 静态文件托管
    server.AddStaticFiles("/daping/", "web");       // 简单配置页面
    
    // WebAPI 简单 Token 认证
    server.AddSimpleTokenVerify("token111286");
    
    // WebSocket 配置,添加路由等
    server.enableWebSocket = true;
    server.WsOnConnectionChanged = WsConnectChanged;
    server.WsOnMessage = OnMessageReceviced;
    
    server.StartServer();
    

    AddBasicAuth 参数说明:AddBasicAuth(需要保护的路径, 用户名, 密码, 免认证子路径(可选))

    PicoServer 的多种认证方式

    同一个项目里,不同路径可以用不同的认证方式,互不干扰:
    好的,更新表格如下:

    方法 适用场景 特点
    AddBasicAuth 简单配置页面、内部工具 浏览器弹框,无需写登录页
    AddSimpleTokenVerify WebAPI、简单接口认证 轻量 Token,无状态验证
    AddJwtTokenVerify WebAPI、标准 JWT 认证 支持过期、刷新等标准特性
    AddStaticFiles 静态文件托管 自动识别 MIME 类型
    enableWebSocket WebSocket 实时通信 支持自定义认证逻辑

    这些中间件和方法属性可以任意组合,各司其职。

    扩展玩法:免认证子路径

    如果配置后台里有一个子路径需要公开,用第四个参数排除:

    // /admin/dashboard/preview/ 不需要认证
    server.AddBasicAuth("/admin/", "admin", "123456", "/admin/dashboard/preview/");
    

    NGINX 配置

    项目前面有 NGINX 做 SSL 和反代。Basic Auth 也可以在 NGINX 层配置,但:

    • 改 NGINX 配置要重载,不够灵活
    • 认证规则写在代码里,和业务在一起,更直观
    • 改密码、加排除路径,改代码发布就行,NGINX 不用动

    NGINX 只需要配置一次反代(按实际路径配置):

    location /daping {
        proxy_pass http://127.0.0.1:8090;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    

    所有请求反代给 PicoServer,具体哪个路径需要认证、用什么方式认证,全由 PicoServer 在代码里决定。

    感慨

    Basic Auth 是一项老技术,但至今仍在简单场景中发挥着价值。PicoServer 新增的 AddBasicAuth 基本认证中间件利用这种“简单”实现:一行代码,不用写登录页,浏览器自动弹框,完美融入现有域名,且和原有主业务不耦合。 如果你也有类似的场景——给简单配置页面加个锁、不想写登录页、不想动 NGINX——不妨试试。

  • 相关阅读:
    详述Java内存屏障,透彻理解volatile
    VMware Workstation Pro 12 ubuntu 20.04 突然奔溃,重新打开后导致win11系统蓝屏问题
    spark中的cache和checkpoint
    MongoDB 索引和常用命令
    服务器访问本机图片nginx配置
    大数据必学Java基础(九十三):JDBC完成CURD
    websocket实时消息推送封装类
    ardupilot相机拍照控制
    全国统计专业技术初级资格考试大纲(2021年)
    Spring Cloud Consul 从入门到精通
  • 原文地址:https://www.cnblogs.com/juziyu/p/20213433