不喜欢广告? 无广告 今天

深入理解HTTP基本认证——无需手动Base64编码即可生成请求头

更新于

HTTP 基本认证比看起来简单。了解授权头中实际包含的内容,为什么它只是基本编码的凭据,以及如何在不使用终端的情况下生成一个。

HTTP基本认证解析——无需手动Base64操作即可生成头信息 1
广告 移除?

如果你曾经调用过API并看到过 Authorization: Basic dXNlcjpwYXNz 在请求头中,你就使用过HTTP基本认证。那串字符看起来很神秘,但实际上它并不是加密过的,而是Base64编码。一旦你理解了这个头信息中实际包含的内容,你就不会再盲目复制粘贴认证字符串了。

Authorization头中实际包含的内容

格式非常简单:

Authorization: Basic <credentials>

其中 <credentials>username:password —— literally用户名,一个冒号,以及密码拼接后进行编码的结果。

对于用户名 alice 和密码 secret:

alice:secret
↓ base64 encode
YWxpY2U6c2VjcmV0

Final header:
Authorization: Basic YWxpY2U6c2VjcmV0

这就是整个机制。没有令牌,没有签名,没有过期时间——只是将凭证编码成HTTP头可以承载的格式。

Base64是编码,不是加密

Base64使用64个可打印字符(A–Z,a–z,0–9,+,/)将二进制数据转换为ASCII文本。关键点是:它可以在没有密钥的情况下完全可逆。任何截获该头信息的人都可以在几秒钟内解码它。

在终端中自行验证:

# Encode
echo -n "alice:secret" | base64
# YWxpY2U6c2VjcmV0

# Decode it back
echo "YWxpY2U6c2VjcmV0" | base64 --decode
# alice:secret

这就是为什么在明文HTTP上使用HTTP基本认证是一个严重的安全问题——认证信息对任何拥有网络访问权限的人都可见。 始终使用HTTPS。

在代码中生成头信息

大多数HTTP客户端可以直接处理基本认证。以下是常见环境中的设置方法:

卷曲

# curl adds the Authorization: Basic header automatically
curl -u alice:secret https://api.example.com/endpoint

手动构造(bash)

CREDENTIALS=$(echo -n "alice:secret" | base64)
curl -H "Authorization: Basic $CREDENTIALS" https://api.example.com/endpoint

Python

import base64
import requests

credentials = base64.b64encode(b"alice:secret").decode("utf-8")
headers = {"Authorization": f"Basic {credentials}"}
response = requests.get("https://api.example.com/endpoint", headers=headers)

JavaScript

const credentials = btoa("alice:secret");

fetch("https://api.example.com/endpoint", {
  headers: { "Authorization": `Basic ${credentials}` }
});

与其每次手动进行编码,不如使用 基本身份验证生成器 —— 粘贴你的凭证,一键获取准备复制的头信息值。

何时使用基本认证(以及何时跳过它)

基本认证适用于以下几种场景:

  • 内部API和工具 —— 当你控制两端且TLS得到保证时
  • 简单的Webhook认证 —— 许多服务支持用于入站Webhook的认证
  • 开发和测试 —— 设置快速,调试简单
  • 遗留系统集成 —— 旧API通常需要它

在以下情况下应跳过它,改用OAuth、JWT或API密钥:

  • 你正在构建一个面向公众的API
  • 你需要令牌过期或撤销,而无需更改密码
  • 用户通过浏览器进行身份验证(OAuth提供了更好的用户体验)
  • 你无法保证请求路径中的所有位置都使用HTTPS

真实的安全状况

基本认证本身并不不安全——它只是裸露的凭证。安全性完全取决于你的传输层:

  • 使用HTTPS时: 凭证在传输过程中被加密。Authorization头的安全性等同于你的TLS实现的安全性。
  • 不使用HTTPS时: 网络上的任何人都可以读取头信息的明文内容。不要在生产环境中这样做。

一个值得了解的实际限制:没有内置的登出机制。凭证会在会话期间的每次请求中发送。对于涉及用户账户或会话管理的情况,使用状态化的方案(如OAuth或会话令牌)会更合适。

无需进行Base64数学运算即可生成头信息

如果你需要为API调用、服务配置或curl命令生成一个格式正确的基本认证头, 基本身份验证生成器 会为你处理编码和格式化。输入你的用户名和密码,获取头信息值。无需终端,无需Base64命令,无需拼写错误。

想要享受无广告的体验吗? 立即无广告

安装我们的扩展

将 IO 工具添加到您最喜欢的浏览器,以便即时访问和更快地搜索

添加 Chrome 扩展程序 添加 边缘延伸 添加 Firefox 扩展 添加 Opera 扩展

记分板已到达!

记分板 是一种有趣的跟踪您游戏的方式,所有数据都存储在您的浏览器中。更多功能即将推出!

广告 移除?
广告 移除?
广告 移除?

新闻角 包含技术亮点

参与其中

帮助我们继续提供有价值的免费工具

给我买杯咖啡
广告 移除?