(一)HTTP 基本认证(Basic Authentication)原理过程,以及esp32 idf服务器和客户端例程

实战派 ESP32-S3,双模无线开发板

ESP32-S3 原生支持 ESP-IDF,WiFi + 蓝牙一次搞定

前言:通过同时讲诉服务器和客户端的处理情况,来理通思维,便于理解整个Basic Authentication认证过程.

一.先普及一下基础知识:

Base64 是一种将二进制数据转换为 ASCII 字符串的编码方式,使用 64 个可打印字符(A-Z, a-z, 0-9, +, /)表示二进制内容,并在末尾用 = 填充。其核心目的是解决二进制数据在纯文本协议(如 HTTP)中传输时的兼容性问题。

HTTP 基本认证(Basic Authentication) 作用:将用户名和密码拼接为 username:password 格式后 Base64 编码,置于 Authorization: Basic <凭证> 头中传输。例如:

GET /protected-resource HTTP/1.1

Authorization: Basic dXNlcjpwYXNzd2Q=
Base64优势
  1. 文本协议兼容性
    确保二进制数据(如加密哈希、文件内容)在 HTTP 头或 URL 中不因非 ASCII 字符被截断或转义。

  2. 简易性与通用性

    • 所有编程语言均支持 Base64 编解码库(如 Python 的 base64、C 的 mbedtls_base64)。
    • 无需复杂配置,适合快速实现轻量级数据封装。
Base64局限性
  1. 数据膨胀
    Base64 编码后数据体积增加约 33%(每 3 字节二进制数据扩展为 4 字符),可能影响传输效率。

  2. 无加密保护
    Base64 仅编码而非加密,攻击者可轻易解码还原原始数据(建议配合 HTTPS 弥补安全性)。

二.HTTP基本认证的原理

  1. 认证流程
    • 步骤1:客户端首次请求
      客户端发送不带认证信息的HTTP请求到服务器受保护资源:GET /protected-resource HTTP/1.1
    • 步骤2:服务器返回质询(Challenge)
      服务器返回401 Unauthorized状态码,并在响应头中添加:WWW-Authenticate: Basic realm="SecureArea"
      其中realm定义受保护资源的安全域,浏览器会弹出用户名/密码输入框。
    • 步骤3:客户端发送凭证
      用户输入凭据后,客户端将username:password拼接后进行Base64编码,生成Authorization头:Authorization: Basic dXNlcjpwYXNzd29yZA==
    • 步骤4:服务器验证
      服务器解码Base64字符串,分离用户名和密码进行校验,通过则返回资源,失败则重复步骤2。
  2. 安全性问题
    • Base64仅为编码而非加密,凭证易被解码为明文,需配合HTTPS保证传输安全。
    • 无法防御重放攻击,攻击者可截获凭证后重复使用。
  3. Base64编码依赖
    使用mbedtls/base64.h库进行编码,需在menuconfig中启用MBEDTLS_BASE64_C组件。

  4. esp32 idf实现细节:

客户端发送请求访问受限区域,服务器返回401未授权,要求认证。客户端将用户名和密码拼接成“username:password”格式,进行Base64编码,然后放在Authorization头的Basic字段中发送。服务器解码验证,通过则返回资源。

对于服务器部分,需要ESP-IDF的httpd组件,创建HTTP服务器。处理函数中,检查请求头中的Authorization字段,如果没有,发送401,并设置WWW-Authenticate头。如果有,解码Base64,验证用户名密码。

对于客户端部分,使用esp_http_client组件。当发起请求时,如果服务器返回401,需要处理重试,或者直接预先添加Authorization头。自动处理401可能需要客户端自己处理,或者直接在第一次请求时添

实战派 ESP32-S3,双模无线开发板

ESP32-S3 原生支持 ESP-IDF,WiFi + 蓝牙一次搞定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值