HTTP 基本认证头怎么生成,Basic 认证从编码到 curl 全说清
讲清 Authorization Basic 头是把用户名冒号密码做 base64 得来的,给出真实编码示例与 curl 写法,说明 base64 不是加密必须配 HTTPS,并教你在浏览器本地生成不上传。
HTTP 基本认证头怎么生成,Basic 认证从编码到 curl 全说清
调内部 API 的时候,你大概率撞上过这样一句文档:「请在请求头里带上 Basic 认证」。然后就没了。没说令牌怎么拼,没说冒号放哪,没说编码用什么字符集。这篇就把 HTTP 基本认证头从头讲到尾,讲完你不光会拼,还知道哪里容易踩坑。
Basic 认证头到底是什么
它就是一行请求头,形如 Authorization: Basic <令牌>。其中 Basic 是认证方案名,后面跟一个 base64 字符串。这个 base64 不是凭空来的,它编码的是「用户名一个冒号密码」这串原文。
拆开看就三步:
- 把用户名和密码用一个英文冒号拼成
user:password。 - 把这串字符按 UTF-8 取字节,做 base64 编码。
- 在前面加上
Basic前缀,塞进Authorization头。
这里有个关键点容易被忽略:只有第一个冒号是分隔符。所以用户名里绝对不能带冒号,带了就会被切错;但密码里可以放冒号,后面所有内容都算密码。解码时按第一个冒号切分,带冒号的密码也能完整还原。
一个真实的编码例子
抽象的描述不如一个能核对的例子。假设用户名是 user,密码是 pass:
- 拼接得到原文:
user:pass - 对
user:pass做 base64,得到:dXNlcjpwYXNz - 完整的头就是:
Authorization: Basic dXNlcjpwYXNz
想自己验一遍,在命令行里跑:
printf '%s' 'user:pass' | base64
输出正是 dXNlcjpwYXNz。注意 printf 不带换行,如果用 echo 会多一个换行符,base64 结果就不一样了,这是很多人手动核对时第一个翻车的地方。
如果你不想每次都开终端,可以直接用 Basic 认证头生成器,填用户名和密码,完整头、单独令牌、两段 curl 示例一起出来,还能反向把令牌解回用户名密码。
在 curl 里怎么用
curl 给了两种写法,场景不同。
第一种是简写,让 curl 自己拼头:
curl -u 'user:pass' https://api.example.com
第二种是把成品头直接贴上去:
curl -H 'Authorization: Basic dXNlcjpwYXNz' https://api.example.com
我自己更偏向第二种。有一次同事在群里问某个接口怎么调,我把 -H 那行直接发过去,他原样粘上就跑通了,省去了来回对密码的麻烦。而且 -H 这种写法分享时不会把明文密码当成单独的命令行参数回显,放进聊天记录里相对干净一点。当然这里说的「干净」是相对的,真要分享凭据,该换密码还是得换。
base64 不是加密,这是底线
这条单独拎出来讲,因为它是 Basic 认证最大的误解。base64 是编码,不是加密。任何人抓到你的 Authorization 头,一步就能把 dXNlcjpwYXNz 解回 user:pass,跟你自己解码没两样,没有任何密钥拦着。
所以结论很硬:Basic 认证只有跑在 HTTPS 上才安全。这时 TLS 会把整个请求,连同请求头一起加密,链路上的人看到的是密文。一旦你在纯 HTTP 上发 Basic 凭据,等于把密码喊给沿途每一跳听。
需要真正的签名或不可逆摘要时,Basic 认证不是那个工具。要对消息做带密钥的完整性校验,看 HMAC 生成器;要的是无状态的令牌鉴权,那是 JWT 的活,不是 Basic 头能替代的。
字符集与服务器侧的坑
非 ASCII 凭据是另一个静默失败的源头。令牌是对 UTF-8 字节做 base64,所以 用户名:密码 或带 emoji 的密码,只要两端都按 UTF-8 处理,就能干净往返。问题出在有些老服务器默认按 ISO-8859-1 解释 Basic 凭据,于是你这边编码没错,它那边解出来是乱的,登录就被拒。
排查办法很直接:先在本地把凭据编码再解码一遍,确认往返干净,令牌本身就排除了嫌疑,剩下的 bug 大概率在服务器的字符集配置上。RFC 7617 的默认和现代服务器都按 UTF-8 来,这是正道。
安全地在本地生成
最后一句不算技术、却最重要:别把真实生产密码粘进任何在线工具。靠谱的做法是工具全程在浏览器标签页里跑纯 JavaScript,用户名、密码、令牌都不离开页面,不发往服务器,也不写日志。即便如此,养成的习惯应该是先拿一个用完即弃的占位值生成格式,确认结构对了,再在本地脚本里换上真正的密钥。
如果你只是想单纯做一次 base64 编码解码,而不涉及认证头的拼装,用 Base64 编码解码工具 更顺手;要拼 Basic 头并配 curl 示例,就回到 Basic 认证头生成器。两个工具都在浏览器本地完成,不上传。
Made by Toolora · Updated 2026-06-13