HTTP Basic Access Authentication Schema

HTTP Basic Access Authentication Schema

背景

随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内容并非完全原创,大多是参考其他文章资料整理所得,感谢每位技术人的开源精神。

介绍

HTTP Basic Access Authentication Schema,HTTP 基本访问认证模式,是 HTTP 1.0 引入的一种 基于 challenge-response 认证机制的身份认证方案。

challenge-reponse :当客户端首次访问受保护资源时,服务器会向客户端发送一个 challenge ,客户端根据 challenge 信息做出对应的 response

HTTP Basic Access Authentication 基于以下模型:客户端必须使用每个域(realm)对应的用户ID和密码进行认证。因此 HTTP Basic Access Authentication 包含三个关键要素:user ID (用户ID)、password (密码)、realm (域)。其中 realm 是服务器分配的一个字符串,用于区分受保护资源所属的不同域。只有当服务器能够验证请求URI对应域的用户ID和密码时,服务器才会为请求提供服务,没有其他可选的认证参数。

流程

  1. 客户端请求访问受保护资源;

  2. 服务端接收到请求后,在请求头部(HTTP Request Headers)中未找到 Authorization,返回 401 Unauthorized,返回响应头(HTTP Response Headers)中带有 WWW-Authenticate,格式如下:

    复制代码
    WWW-Authenticate: Basic realm="Secure Area"

    这就是服务器向客户端发送的 challenge ,其中 Basic 指明服务器需要的访问认证方式,realm 是服务器分配的一个字符串,用于标识请求 URI 对应的受保护域。WWW-Authenticate 中至少包含一个 challenge

  3. 客户端根据接收到的服务器响应中 WWW-Authenticate 信息得知需要执行 Basic 访问认证,如果客户端是浏览器,则会自动弹出一个登录窗口,输入用户ID和密码后提交认证请求。客户端发送的认证请求中包含 Authorization 头信息,格式如下:

    复制代码
    Authorization: Basic YWRtaW46MDAwMDAw

    这就是客户端向服务器发送的 response ,其中 Basic 指明客户端遵从的访问认证方式,后面紧跟一个 Base64 编码值,通过以下公式计算所得:

    复制代码
    base64(userid:password)
  4. 服务端收到请求后执行验证,成功返回 200 OK,失败返回 401 Unauthorized

    • 根据用户请求的资源地址确定资源对应的 realm
    • 解析请求头中 Authorization ,获得用户ID和密码;
    • 判断用户是否有访问 realm 的权限;
    • 验证用户ID和密码是否匹配。

安全缺陷

  • 用户ID和密码通过明文传输,如果未启用传输层加密,则密码可轻易被中间人截获;
  • 认证一旦通过就无法随时吊销。

参考

RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication

相关推荐
小林ixn19 小时前
跨域、SSE 与 WebSocket:从一次「请求被拦截」说起
websocket·http
小此方1 天前
Linux网络(十一):HTTP重定向与请求方法详解:从301/302状态码到GET/POST,再认识Fiddler抓包
linux·网络·http
Lhappy嘻嘻2 天前
网络(六)|应用层 HTTP&HTTPS:URL、请求响应、Cookie 与证书
网络·http·https
ControlRookie3 天前
第23篇_源码加更 05|HTTP Server、连接实例和诊断数据
http·codesys·plc通信·开源源码
企业数字化笔记3 天前
AI写的网站一直自动跳转怎么办?301、302和HTTPS重定向排查
网络协议·http·https
那年窗外下的雪.3 天前
AIDC 学习日志|第 24 天|设备输出反推与 MAC Flapping 定位
网络协议·学习·tcp/ip·http·macos·tcpdump
sugar__salt3 天前
大模型流式输出完全指南(上):从 HTTP 长连接到手写 SSE
网络·网络协议·http
2601_962885724 天前
不用 SDK 也能取 A 股数据:AlphaFeed REST API用 cURL/HTTP 直连教程
网络·网络协议·http
为思念酝酿的痛4 天前
应用层协议HTTPS
网络·网络协议·http·https
隐擎fox4 天前
深入下一代 Web 协议风控:HTTP/2 帧结构解析与 Akamai/Cloudflare H2 指纹检测实战
python·网络协议·http·ip/tcp