HTTP 常见认证方式有哪些?Basic、Bearer Token 和 Cookie 有什么区别?
简化版
HTTP 常见认证方式包括 Basic、Bearer Token、Cookie Session、Digest、OAuth 2.0 等。Basic 把用户名密码做 Base64 后放在 Authorization 头里,必须配合 HTTPS;Bearer Token 把访问令牌放在 Authorization: Bearer <token> 中,谁持有令牌谁就能访问;Cookie Session 由浏览器自动携带 Cookie,服务端通过 session 或签名信息识别用户。接口调用常用 Bearer,浏览器传统登录常用 Cookie。
详细版
常见认证头:
Authorization: Basic base64(username:password)
Authorization: Bearer eyJhbGciOi...
Cookie: sid=abc123
Basic 简单但安全性弱,适合内部工具或临时保护,必须走 HTTPS。Bearer Token 常见于 API、移动端、前后端分离和 OAuth 2.0。Cookie 更贴近浏览器机制,可以配合 HttpOnly、Secure、SameSite 防护。面试中要区分认证和授权:认证确认“你是谁”,授权决定“你能做什么”。
完整版教学
一、认证和授权先分清
认证 Authentication 是确认用户身份,例如账号密码、Token、证书。授权 Authorization 是身份确认后,判断这个用户有没有权限访问某个资源。
认证: 你是谁
授权: 你能访问什么
HTTP 本身是无状态协议,所以认证信息通常要随请求携带,或通过 Cookie 间接关联服务端会话。
二、Basic 认证:简单但必须依赖 HTTPS
Basic 认证格式如下:
Authorization: Basic dXNlcjpwYXNz
其中 dXNlcjpwYXNz 是 username:password 的 Base64 编码。Base64 不是加密,任何人拿到都能解码。
Basic 的特点:
- 实现简单,几乎所有客户端都支持;
- 每次请求都携带凭证;
- 如果没有 HTTPS,很容易被窃听;
- 不方便做细粒度权限和令牌撤销。
Basic 的关键风险不是 Base64 本身,而是它把长期凭证反复放在请求里。
三、Bearer Token:谁持有令牌谁访问
Bearer Token 常见格式:
Authorization: Bearer <access_token>
Bearer 的含义是“持有者令牌”。服务器通常校验 token 的签名、有效期、发行方、受众和权限范围。
它的优势是适合 API:
- 不依赖浏览器 Cookie;
- 适合移动端、开放平台、微服务调用;
- 可以设置短有效期;
- 可以配合 refresh token 和权限 scope。
缺点也很直接:令牌一旦泄露,攻击者就可以冒用,直到令牌过期或被撤销。
四、Cookie Session:浏览器登录最常见
Cookie Session 的流程通常是:
登录成功 -> 服务端生成 session -> Set-Cookie: sid=xxx
后续请求 -> 浏览器自动携带 Cookie -> 服务端查 session
示例:
Set-Cookie: sid=abc123; HttpOnly; Secure; SameSite=Lax
Cookie 的优势是浏览器自动管理,适合传统 Web 登录。安全上要关注:
HttpOnly降低 XSS 读取 Cookie 的风险;Secure保证只通过 HTTPS 发送;SameSite降低 CSRF 风险;- Session 需要服务端存储或使用签名 Cookie。
五、Token 和 Cookie 不是同一维度
很多人会把 Token 和 Cookie 对立起来,其实它们不是同一维度:
| 维度 | Token | Cookie |
|---|---|---|
| 本质 | 凭证格式或令牌 | 浏览器存储和自动携带机制 |
| 放在哪里 | Header、Cookie、Body 都可能 | Cookie 头 |
| 是否自动携带 | 不一定 | 浏览器对匹配域名自动携带 |
| 常见风险 | 泄露后被冒用 | CSRF、XSS、配置错误 |
JWT 可以放在 Authorization 头,也可以放在 Cookie 里。真正要讨论的是“凭证怎么校验”和“凭证怎么存储与传输”。
六、实际接口怎么选
常见选择:
- 内部调试或简单网关保护:Basic + HTTPS;
- 前后端分离 API:Bearer access token;
- 传统服务端渲染 Web:Cookie Session;
- 第三方授权登录:OAuth 2.0 / OIDC;
- 服务间强身份认证:mTLS 或签名请求。
工程上还要考虑过期时间、刷新机制、撤销机制、权限 scope、审计日志和防重放。
七、常见误区与追问
- 误区:Base64 加密后就安全了。 Base64 只是编码,不是加密,Basic 必须配合 HTTPS。
- 误区:Bearer Token 泄露也没关系。 Bearer 的语义就是持有即可使用,泄露后风险很高。
- 误区:Token 一定比 Cookie 安全。 安全取决于存储、传输、过期、撤销和防护策略,不是名称决定。
- 误区:认证和授权是同一件事。 认证确认身份,授权判断权限。
- 追问:Cookie 如何降低 CSRF 风险? 可以使用
SameSite,并配合 CSRF Token、Origin/Referer 校验等手段。 - 追问:为什么 API 常用 Authorization 头? 它不依赖浏览器自动携带 Cookie,适合跨端、服务间和开放接口。
八、加强记忆
HTTP 认证记住三类:Basic 是账号密码编码后随请求带,Bearer 是持有令牌即可访问,Cookie Session 是浏览器自动带会话标识。Basic 必须 HTTPS,Bearer 要防泄露和控制有效期,Cookie 要关注 HttpOnly、Secure、SameSite 和 CSRF。回答时先分清认证和授权,再按凭证格式、携带方式、风险点展开。