你在开发一个后台管理系统,前端调用接口时总被返回401错误,提示“未授权”。这时候后端同事告诉你:“把认证信息加在请求头里。”你一头雾水:HTTP认证头到底怎么用?
什么是HTTP认证头
HTTP认证头(Authorization Header)是客户端向服务器证明自己身份的一种方式。它通常出现在HTTP请求的头部,用来携带用户的身份凭证,比如用户名密码、令牌(token)等。服务器收到请求后,会解析这个头,判断是否有权限访问资源。
常见的认证方式
最常用的两种是Basic认证和Bearer认证。
Basic认证:用账号密码登录
Basic认证适合内部系统或测试环境。它的原理是把“用户名:密码”用Base64编码后,加在请求头中。
比如你的账号是admin,密码是123456,组合起来就是admin:123456,经过Base64编码后变成YWRtaW46MTIzNDU2。请求头就写成:
Authorization: Basic YWRtaW46MTIzNDU2
在JavaScript中,可以用fetch这样写:
fetch('/api/data', {
headers: {
'Authorization': 'Basic YWRtaW46MTIzNDU2'
}
})
注意:Basic认证的凭证是明文编码,并不加密,必须配合HTTPS使用,否则容易被截获。
Bearer认证:用Token通行
现在大多数Web应用都用Bearer认证。用户登录后,服务器返回一个JWT之类的token,之后每次请求都把这个token放在认证头里。
比如你拿到的token是eyJhbGciOiJIUzI1NiIs...,那请求头就是:
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
前端代码常见写法:
const token = localStorage.getItem('auth_token');
fetch('/api/profile', {
headers: {
'Authorization': `Bearer ${token}`
}
})
这种模式不需要每次都传用户名密码,token自带过期时间,安全性更高。
其他认证类型
除了这两种,还有Digest、OAuth 2.0、API Key等方式。比如有些第三方接口要求你在Header里加X-API-Key,虽然不是标准的Authorization头,但作用类似。
浏览器开发者工具怎么看认证头
打开Chrome的开发者工具,切换到Network标签,点开某个请求,查看Headers部分。如果看到Authorization: Bearer ...或者Authorization: Basic ...,说明这个请求带了认证信息。
如果你发现没带上,检查代码有没有拼错header名称,或者token是否为空。
Node.js后端如何读取认证头
在Express中,可以从req.headers里直接读取:
app.get('/api/secure', (req, res) => {
const authHeader = req.headers['authorization'];
if (!authHeader) {
return res.status(401).send('缺少认证头');
}
// 判断是Bearer还是Basic
if (authHeader.startsWith('Bearer ')) {
const token = authHeader.slice(7); // 去掉"Bearer "
console.log('收到token:', token);
}
});
别忘了开头的空格处理,Bearer后面有个空格,切的时候要小心。