认证管你是谁,鉴权管你能干啥,别再混着用了

Alex2024年01月23日 1 分钟Technology
认证管你是谁,鉴权管你能干啥,别再混着用了

做安全方向这些年,我被问得最多的一个问题就是:"认证和鉴权到底有什么区别?"很多刚入行的同学会把这两个词混着用,简历上写"负责用户认证与鉴权模块",面试官一追问就卡壳。今天我把这两个概念掰开了讲,顺便聊聊工程里怎么落地。

先说认证:你到底是谁

认证(Authentication)解决的就是一个事儿——证明你确实是你说的那个人。线下你刷脸进小区、按指纹开手机,都是认证。到了数字世界,凭证的形态更多样,但本质没变:系统得拿到某种证据,确认对面坐着的不是冒充者。

我日常接触到的认证手段,大致分三档:

  • 密码:最老、最基础,也是被爆破最多的。
  • 二因素认证:密码之外再叠一道,比如短信验证码、TOTP 令牌。我实测下来,光加一个短信 OTP 就能挡住绝大多数自动化撞库,但防不住 SIM 卡被物理劫持的情况。
  • 数字证书:基于非对称密钥对做加密校验,银行 U 盾、企业内网登录常见。

再说鉴权:你进来之后能干什么

身份确认完了,接下来就是鉴权(Authorization)——回答"你能做什么"。我一般这么跟新人解释:认证是保安查你工牌,鉴权是门禁系统决定你能刷开哪几扇门的磁吸锁。迈过门槛是一回事,进哪间房是另一回事。

实现层面,我见过的项目里用得最多的几套机制:

  • 访问控制列表(ACLs):逐条写死"用户 A 能读资源 X,不能写资源 Y"。小系统够用,规模一大就维护噩梦。
  • 基于角色的访问控制(RBAC):先定义角色(管理员、编辑、只读),再把用户挂到角色上,权限跟着角色走。我做过的项目里 RBAC 是绝对主力,权限变更不用动用户表。
  • 策略引擎:一组声明式规则,界定"什么条件下允许执行什么操作"。AWS IAM Policy 就是典型,JSON 里写 Allow/Deny,灵活但写复杂了容易出漏洞。

缺一个会怎样

我踩过一次坑。早期有个内部工具,登录走 OAuth 没问题,但后端接口没做鉴权,任何登录用户都能调管理员接口改配置。等于家里装了防盗门,进去之后保险柜、书房、车库全敞着。反过来我也见过只做了权限表、没做身份校验的接口,谁都能拿个伪造的 token 进来,满屋子小锁,但到底谁拿着钥匙,日志里查不到。

所以我的判断很明确:认证和鉴权是两道独立的防线,一道都不能省。

工程里怎么选协议

落到代码层面,我手边常翻的协议就四个:

  • **OIDC(OpenID Connect)**:在 OAuth 2.0 之上加了一层身份能力。客户端先验证用户身份,再拿到基础个人信息(姓名、邮箱这些)。我最常用它做 SSO,前后端分离架构下体验最顺。
  • **OAuth 2.0**:严格说是个授权框架,让第三方应用在不索要用户密码的前提下,访问用户在另一服务上的资源。它聚焦"授权"本身,不直接做身份验证,但实际项目里经常被拿来当授权流程的骨架。
  • **SAML 2.0(安全断言标记语言)**:一套 XML 标准,用于身份提供者(IdP)和服务提供者(SP)之间交换验证与授权断言。企业环境里的 SSO 很多还是靠它,用户一次登录就能访问十几个内部系统。
  • **CAS(Central Authentication Service)**:面向 Web 应用的单点登录协议,多应用切换只需登录一次。高校场景用得最多,校园网内外应用的登录都能被它串起来。

选哪个?我一般看四件事:应用是面向内部还是消费者、身份信息的敏感程度、要不要 SSO、跟现有基础设施的兼容成本。没有"最好"的协议,只有"最匹配当前架构"的那个。

最后说两句

攻击手段这两年确实越来越花,钓鱼、凭据填充、供应链投毒,防不胜防。但回到基本盘,用户侧把多重认证打开,企业侧把权限策略写周全,能挡掉绝大多数低级攻击。每次点"登录"那一下,背后连着的是一整条身份链路。把认证和鉴权这两件事做扎实,比堆花哨的安全设备管用得多。

B
关于作者 · Alex

我是 Alex,12 年+ 软件架构经验,专注 AI 私有化部署、DevOps 与云原生架构。这里持续分享一线技术实践与职业成长。

订阅更新

Stay updated with the latest insights on AI, DevOps, and cloud architecture.

RSS 订阅