最简单也是最不安全的Web认证方式——HTTP Basic Auth

我们常见的 Web 认证方式有3种:

  • HTTP Basic Auth

  • Cookie

  • Token 验证

第一种 HTTP Basic Auth 已经很少使用,但最近使用 OpenCode 时,发现它的 Web UI 还在采用这种认证方式。

今天就来回顾一下这种最简单也最不安全的认证方式——HTTP Basic Auth。

一、什么是 HTTP Basic Auth

它是 HTTP 协议的一部分,浏览器和 Web 服务器(Nginx/Apache 等)原生支持,开发者通常无需自己编写客户端代码,服务端也只需简单配置即可实现。

二、HTTP Basic Auth 认证过程

  1. 客户端向服务器请求数据(可能是网页或 AJAX 异步请求),此时客户端尚未被验证,发送的请求如下:

    GET /index.html HTTP/1.1
    Host:www.httpbasic.com
  2. 服务器向客户端返回 401 验证请求,服务器返回数据大致如下:

    核心是浏览器依赖 WWW-Authenticate: Basic 来决定弹出登录框,如果返回 401 但没有这个 header,浏览器通常不会弹出原生登录框,而是直接显示 401 错误页面

    HTTP/1.1 401 Unauthorized
    Server: SokEvo/1.1
    WWW-Authenticate: Basic realm="Function1"
  3. 浏览器收到 401 后,会自动弹出登录窗口,要求用户输入用户名和密码。

  4. 用户输入用户名和密码后,浏览器会将用户名及密码以 BASE64 编码方式处理,并将编码后的内容放入请求头中,此时客户端发送的请求变为:

    GET /index.html HTTP/1.1
    Host:www.httpbasic.com
    Authorization: Basic dXNlcjpwYXNzd29yZA==

    注:dXNlcjpwYXNzd29yZA== 是编码后的用户名及密码,编码规则是用base64给"用户名:密码"生成编码,由浏览器自动完成,无需人工编码

  5. 服务器收到请求后,取出 Authorization 字段后的用户信息并解码,将解码后的用户名和密码与用户数据库进行比对验证;若验证通过,服务器则根据请求,将资源返回给客户端。

三、认证效果与凭据缓存

1. 认证效果

客户端未认证时,会弹出用户名密码输入框,此时请求处于 pending 状态;用户输入用户名密码后可访问。

浏览器不提供 logout 功能,仅当浏览器关闭时,Basic 认证才会失效。

2. 账号密码缓存

账号密码在浏览器中主要缓存在内存,主流浏览器中,其生命周期如下:

  • 关闭标签页 → 缓存通常仍保留(重新访问同一站点一般无需重新登录)

  • 关闭整个浏览器 → 缓存一般会被清空

3. Realm(认证域/保护空间)

Realm 是 HTTP Basic Auth 中用来划分认证边界、管理凭据缓存、区分权限的核心机制,具体特点如下:

  • 浏览器以「协议 + 主机 + 端口 + Realm」作为唯一缓存键

  • 其中一项不同,就视为全新的认证域,必须重新登录

  • 最常用场景:按路径/功能划分 Realm,实现权限隔离

  • 下面的 Nginx 配置示例,能清晰体现 Realm 的用途

    server {
        listen 443 ssl;
        server_name www.httpbasic.com;
        # 管理员区域 - Realm: Admin
        location /admin/ {
            auth_basic           "Admin";
            auth_basic_user_file /etc/nginx/.htpasswd_admin; # 专用账号文件
        }
        # API 接口区域 - Realm: API
        location /api/ {
            auth_basic           "API";
            auth_basic_user_file /etc/nginx/.htpasswd_api; # 另一组账号
        }
        # 公共文档 - 无认证
        location /docs/ {
            allow all;
        }
    }

四、HTTP Basic Auth 的优缺点

1. 缺点

  • 数据不安全:传输过程中仅对账号密码进行编码,未进行加密,约等于明文传输

  • 每次请求都携带凭证,增加泄露风险

  • 无法实现安全的登出

  • 不支持多因素、精细权限控制

2. 优点

  • 简单:浏览器和代理服务器(如 Nginx)默认支持,无需服务端和客户端额外开发代码。

  • 全请求认证:连同静态数据(如前端 JS、图片等)一起进行认证,避免了其他认证方式中静态资源可被随意访问的问题,能有效杜绝爬虫、盗链等行为。

五、适用场景

  • 内部使用的系统(范围可控、低敏感),且必须配合 HTTPS 使用(否则极度危险)

  • 纯静态站点(无需复杂认证逻辑,仅需简单访问控制)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值