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

📅 2026/6/28 3:05:19
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简单配置页面、内部工具浏览器弹框无需写登录页AddSimpleTokenVerifyWebAPI、简单接口认证轻量 Token无状态验证AddJwtTokenVerifyWebAPI、标准 JWT 认证支持过期、刷新等标准特性AddStaticFiles静态文件托管自动识别 MIME 类型enableWebSocketWebSocket 实时通信支持自定义认证逻辑这些中间件和方法属性可以任意组合各司其职。扩展玩法免认证子路径如果配置后台里有一个子路径需要公开用第四个参数排除// /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; }