一、接口身份认证基础:认证与授权的区别、常见认证协议概述、认证在API安全中的位置

说到接口安全,大家可能最先想到的就是“认证”这个词。我这些年折腾过的项目,但凡跟外部系统打交道,第一件事就是把认证方案定下来。但说实话,很多新手甚至老手,对“认证”和“授权”这两个概念都是混着用的。咱们今天先把这层窗户纸捅破。

1.1 认证 vs 授权:别再搞混了

先问个问题:你进公司大门刷卡,这个动作是认证还是授权?

刷卡开门,其实是两步。刷卡验证你的身份——这是认证。门开了你能进的是办公区,但进不了机房——这是授权。说白了,认证是“你是谁”,授权是“你能做什么”。

一句话总结:认证(Authentication)确认身份,授权(Authorization)确认权限。先认证,后授权。

在API的世界里,区别更加明显。我记得有一次在项目中,一个同事把JWT里只放了user_id,然后拿着这个去查所有用户的订单数据。认证通过了,但授权没做,结果用户A能看用户B的订单——这问题就大了。你想想看,认证过关只是第一步,授权漏洞才是真正的后门。

维度 认证(Authentication) 授权(Authorization)
核心问题 你是谁? 你能做什么?
常见方式 密码、指纹、、OAuth ACL、RBAC、权限策略
传递信息 身份凭证(Credentials) 权限声明(Claims/Scope)
失败后果 未知用户访问系统 越权操作、数据泄露
API典型场景 登录接口 / 校验Scope、角色、资源归属

我曾经踩过的坑:一个电商后台系统的接口只做了认证,没做细粒度的授权校验。结果一个普通客服居然通过改URL参数看到了CEO的订单数据。修复方式就是补了一层资源归属校验——认证只是及格线,授权才是安全保障。

1.2 常见认证协议概述

做接口开发这几年,我接触过的认证协议少说也有五六种。每次跟新团队合作,我都会先问一句:“你们的认证方案是什么?”答案五花八门,但归纳起来不外乎下面这几种主流协议。

咱们一个一个来过,我把它们分成了三个“家族”:

1.2.1 HTTP Basic Authentication

最简单的协议。说白了就是请求头里塞一个Base64编码的“用户名:密码”。

GET /api/user HTTP/1.1
Authorization: Basic dXNlcjpwYXNzMTIz

嗯,这里要注意:Base64不是加密,是编码。我跟你们说,以前有个项目居然拿这个当加密方案,结果用户密码在网络传输中就跟明文一样。现在除非是内部测试,基本不会在生产环境用。我个人习惯是——不用在生产环境,除非配合HTTPS且只用来做短时效的临时密钥交换。

1.2.2 Session-Cookie 认证

早期的Web应用主流方案。用户登录后服务端创建Session,把Session ID塞到Cookie里返回。用户每次请求都带上Cookie,服务端拿着Session ID查会话缓存。

好处是实现简单,坏处也很明显——服务端要维护状态(有状态),高并发下Session共享很麻烦。我记得有个项目就因为Session单点存储,扩容后用户频繁掉线,后来被迫上了Redis做Session集中管理。

1.2.3 -based 认证 (JWT)

无状态认证的典范。用户登录后服务端签发一个(通常用JWT格式),客户端保存,后续请求通过Authorization请求头发送。

POST /api/login
{"username": "admin", "password": "123456"}
→ 返回: {"access_": "eyJhbGciOiJI..."}
→ 后续请求:
GET /api/orders
Authorization: Bearer eyJhbGciOiJI...

个人项目中我几乎都选JWT。原因很简单:服务端不用存Session,横向扩展随便加节点,里还能带自定义数据。但有一点要注意——JWT一旦签发,除非黑名单机制,否则在有效期内无法主动作废。所以我把的过期时间设得很短,配合Refresh 轮换。

1.2.4 OAuth 2.0

这是一个授权框架,但日常工作中大家也用它来做第三方认证。比如“用微信登录”这个操作,背后就是OAuth 2.0的流程。它定义了四种授权模式:授权码模式、隐式模式、密码模式、客户端凭证模式。

我个人的建议:选协议前先问自己三个问题:客户端是浏览器还是原生应用?需不需要第三方授权?对并发和扩展性要求高不高?答案不同,选择截然不同。

市面上还有SAML(企业级SSO常用)、OpenID Connect(OAuth 2.0之上加身份层)、LDAP(企业内部用户目录)等,但咱们课程后面会逐一展开,这里先有个框架印象就行。

1.3 认证在API安全中的位置

好,咱们来画一张“全景图”。API安全绝不仅仅是认证这一件事,但认证是第一步——是门卫。门卫失守,后面再强的防火墙也没用。

API安全架构中的认证位置 API客户端 认证网关 Authentication 业务API 请求+凭证 身份确认后放行 授权校验 Authorization 安全审计 Audit & Monitoring 传输加密 TLS/HTTPS ⚠️ 关键认知 认证是安全的第一道门禁 授权、审计、加密层层递进 常见认证协议 • HTTP Basic • Session-Cookie • JWT • OAuth 2.0 • OpenID Connect • SAML 2.0 • LDAP

从这张图可以看得很清楚:API安全不是单一的一层。我个人习惯把API安全框架分为四个层次:

  1. 传输安全层:TLS/HTTPS打底,保证数据在路上不被劫持。
  2. 身份认证层:就是我们这章讲的核心——你是谁。
  3. 权限授权层:你进来了,能干哪些事?
  4. 审计监控层:所有操作的日志、异常行为的告警。

认证就是第二层的哨兵。如果哨兵打盹,对手穿着你的工牌进了大楼,那后面的权限墙再高也容易被绕过去。我经历过一个真实的场景:某系统只做了基于请求来源IP的“认证”,结果攻击者伪造了一台内网IP的机器,直接绕过所有认证拿到了管理API。那时候我们才意识到——认证不能靠IP这种弱证据。

小结一下:记住三个词——谁来访(认证)、能干啥(授权)、留证据(审计)。三件事缺一不可,但认证永远是第一关。