身份认证基础

说实话,干了这么多年系统架构,我最怕听到的一句话就是:「这个接口不用鉴权,直接放行吧。」

每次听到这话,我都得停下来问一句:你到底是没做身份认证,还是把认证和授权搞混了?
这两个概念,我见过太多团队栽在上面。今天我们就把这层窗户纸捅破。

什么是身份认证

身份认证,说白了就是回答一个问题:「你是谁?」

你想想看,每次你登录一个系统,输入用户名密码,这就是在向系统证明你的身份。系统拿到你的凭证,去数据库里比对,确认「嗯,确实是你本人」——这个过程就叫身份认证。

核心定义:身份认证(Authentication)是验证用户或系统声称的身份是否真实有效的过程。简称 AuthN。

我刚开始做项目时,总觉得认证就是个「登录页」的事儿。直到有一次,一个内部系统被人暴力破解了管理员账号——密码是 admin123。从那以后我才明白:认证是系统的第一道门,门锁质量直接决定房子安不安全。

身份认证 vs 授权

这两个词长得像,很多人混着用。但它们的区别,我建议你一定要记清楚。

维度 身份认证(AuthN) 授权(AuthZ)
核心问题 你是谁? 你能做什么?
执行顺序 先认证 后授权
典型凭证 密码、令牌、生物特征 权限策略、角色、ACL
失败后果 禁止进入系统 禁止执行操作
一个比喻 出示身份证 看能不能进 VIP 室

举个例子你就明白了。你拿着工卡刷卡进公司大楼,刷卡验证身份的过程就是认证。进了大楼,你的工卡只能刷开你部门的门,刷不开 CEO 办公室——这就是授权在起作用。

我的一个小习惯:画架构图时,我会把认证和授权拆成两个独立的模块,用不同的颜色标记。这样团队沟通时,一眼就能看出哪块出了问题。

常见认证方法

市面上常见的认证方法就这么几类,各有各的适用场景。

  1. 密码认证:最传统,用户 + 密码。简单但容易泄露。
    我在项目中遇到过,有些团队直接把密码明文存数据库……嗯,这事千万别干。
  2. 多因素认证(MFA):密码 + 验证码 / 指纹 / 硬件 Key。安全性高很多。
    我建议所有涉及敏感数据的系统,MFA 必须上。
  3. 令牌认证:JWT、OAuth 。适用于分布式和微服务架构。
    无状态,扩展性好,但令牌的签发和吊销需要仔细设计。
  4. 证书认证:基于 X.509 证书,常见于企业内部系统和 mTLS 通信。
    安全等级高,但部署和证书管理成本也高。
  5. 生物特征:指纹、人脸、虹膜。用户体验好,但涉及隐私合规问题。

我曾经踩过的一个坑:在某云原生项目里,团队用 JWT 做服务间认证,但 的有效期设成了 7 天。结果一个泄露的 被攻击者用了整整一周才被发现。现在我的原则是:短生命周期 + 实时吊销,缺一不可。

认证与授权的关系

我习惯用一张图来说明它们的协作流程。

身份认证与授权协作流程图 用户 身份认证 AuthN 授权 AuthZ ✅ 允许访问 ❌ 拒绝访问 关键原则:先认证,再授权 认证失败 → 直接拒绝,不查询权限 认证通过 → 进入授权判断,决定具体操作范围

实战中容易忽略的问题

理论说完了,聊聊我在真实项目里见过的一些坑。

  • 认证和授权混在一个中间件里 —— 这样耦合太紧,你想换认证方式或调整权限模型时,改动成本会很高。我个人习惯是拆成两个独立的 Filter。
  • 只做认证,不做授权 —— 用户登录后所有接口都能调,这跟没锁门差不多。
  • 忽略认证失败的处理 —— 返回信息不要太具体。别告诉攻击者「用户名存在但密码错误」,统一返回「认证失败」就行。
  • Session 和 混用 —— 一个系统里同时用 session 和 jwt,容易在状态管理上打架。选一种,保持统一。

一个小建议:设计认证模块时,先把「用户登录、注销、密码重置、凭证刷新」这四个场景的流程图画清楚。画清楚了再写代码,后面会省很多返工的麻烦。

身份认证是整个安全体系的基石。地基不稳,上面建什么都是白搭。把这部分理解透了,后面我们聊 Secrets 管理和联动配置时,你才能知道每个组件到底在保护什么。