身份验证基础:你凭什么证明你是谁?
说实话,我做了这么多年安全审计,发现很多团队在身份验证这块栽跟头。不是技术多难,而是基础概念没吃透。今天咱们就把身份验证这事儿掰开揉碎了讲清楚。
身份验证的定义
身份验证,说白了就是回答一个问题:“你声称你是谁,怎么证明?”
在计算机世界里,这通常是一个二元判定——要么通过,要么拒绝。没有中间状态。我在一次合规审计中遇到过一家公司,他们的登录系统居然有“半通过”状态,结果被审计官直接打回重做。嗯,这里要注意:身份验证的结果必须是明确的。
核心定义:身份验证(Authentication)是确认用户、设备或系统所声称身份是否真实的过程。它与授权(Authorization)不同——验证是“你是谁”,授权是“你能干什么”。
身份验证的三要素
你想想看,现实生活中我们怎么证明身份?身份证(你拥有的)、密码(你知道的)、指纹(你是什么)。计算机世界也一样,所有身份验证手段都逃不出这三个维度。
| 要素 | 定义 | 典型例子 | 弱点 |
|---|---|---|---|
| 你知道的 | 只有你本人知道的信息 | 密码、PIN码、密保答案 | 容易被猜测、钓鱼、窃取 |
| 你拥有的 | 你物理持有的物品 | 智能卡、U盾、手机(OTP)、硬件令牌 | 可能丢失、被盗、被复制 |
| 你是什么 | 你固有的生物特征 | 指纹、人脸、虹膜、声纹 | 不可重置、可能被仿冒 |
我的经验:单要素验证就像只用一把锁锁门。我在做设备合规审计时,见过太多只用密码的系统被攻破。多因素验证(MFA)才是正道——至少组合两个不同要素。
多因素验证(MFA)为什么重要?
我曾经参与过一个金融系统的合规审计。他们的管理员账号只用密码登录,结果被撞库攻击,损失惨重。从那以后,我对MFA特别执着。
MFA的核心逻辑很简单:攻击者同时攻破两个不同要素的概率,远低于攻破一个。比如密码+手机验证码,就算密码泄露了,没有手机也白搭。
避坑指南:我曾经见过一家公司把“密码+密保问题”当MFA用。这其实还是单要素——都是“你知道的”。真正的MFA必须来自至少两个不同的要素类别。
常见身份验证协议
理论说完了,咱们看看实际工作中最常用的三个协议。我按使用场景给你捋一遍。
RADIUS(远程认证拨号用户服务)
RADIUS是个老牌协议,但老当益壮。它最初是为拨号上网设计的,现在广泛用于网络设备认证——比如你连公司Wi-Fi时,后台可能就在跑RADIUS。
它的工作模式是客户端/服务器架构:
- 客户端:网络接入设备(交换机、AP、VPN网关)
- 服务器:集中存储用户凭证和策略
- 协议:基于UDP,使用共享密钥加密
# RADIUS认证流程(简化版)
1. 用户输入凭证 → 接入设备
2. 接入设备封装Access-Request → RADIUS服务器
3. RADIUS服务器验证凭证
4. 返回Access-Accept或Access-Reject
5. 接入设备根据结果允许或拒绝访问
实际场景:我在审计某大型企业的无线网络时,发现他们的RADIUS服务器没有配置Failover。结果主服务器宕机,全公司连不上Wi-Fi。记住:RADIUS服务器必须做高可用。
LDAP(轻量级目录访问协议)
LDAP不是用来做验证的?很多人有这个误解。其实LDAP本身是目录访问协议,但它常被用来做身份验证的后端——说白了,就是查目录里的用户信息来验证身份。
LDAP把用户信息组织成树状结构,每个条目有唯一的DN(Distinguished Name)。验证时,客户端绑定(Bind)到LDAP服务器,提供DN和密码,服务器验证后返回结果。
| 特性 | RADIUS | LDAP |
|---|---|---|
| 主要用途 | 网络接入认证 | 目录服务+认证 |
| 传输协议 | UDP | TCP |
| 数据结构 | 扁平属性 | 树状目录 |
| 加密方式 | 共享密钥 | LDAPS(TLS) |
| 典型场景 | Wi-Fi、VPN、交换机 | 企业邮箱、内部系统 |
我的建议:如果你在做设备合规审计,LDAP通常用于管理设备的管理员账号。我曾经审计过一家公司,他们的LDAP匿名绑定没关,任何人都能枚举所有用户名——这是高危漏洞。
OAuth 2.0(开放授权协议)
OAuth 2.0严格来说是授权协议,不是身份验证协议。但实际工作中,它经常被用来做身份验证——比如“用登录”或“用Google账号登录”。
OAuth 2.0的核心角色:
- 资源所有者:用户本人
- 客户端:想要访问用户资源的应用
- 授权服务器:验证用户身份并发放令牌
- 资源服务器:存储用户资源,验证令牌后提供访问
# OAuth 2.0授权码流程(最常用模式)
1. 用户点击“用XX登录”
2. 客户端将用户重定向到授权服务器
3. 用户登录并授权
4. 授权服务器返回授权码
5. 客户端用授权码换取访问令牌
6. 客户端用访问令牌访问资源服务器
注意:OAuth 2.0本身不提供身份信息。我见过有人直接用访问令牌当身份凭证,结果被中间人攻击。正确的做法是使用OpenID Connect(OIDC)——它在OAuth 2.0之上加了身份层。
身份验证协议选型对比
你可能会问:这么多协议,我该用哪个?我根据自己的经验给你一个参考:
| 场景 | 推荐协议 | 原因 |
|---|---|---|
| 网络设备接入(Wi-Fi/VPN) | RADIUS | 成熟稳定,设备原生支持 |
| 企业内部系统统一认证 | LDAP + Kerberos | 与Active Directory集成好 |
| 第三方登录/移动端 | OAuth 2.0 + OIDC | 灵活,支持现代应用架构 |
| 设备合规审计场景 | RADIUS + TACACS+ | 支持命令级审计和授权 |
身份验证核心逻辑图
下面这张图把身份验证的三要素和常见协议的关系画清楚了。我建议你保存下来,做审计时对照着看。
小结
身份验证是整个安全体系的基石。三要素是理论框架,RADIUS、LDAP、OAuth 2.0是实战工具。我个人习惯在做设备合规审计时,先搞清楚客户用了哪些要素组合,再检查协议配置是否合理。
记住一句话:验证越严格,攻击越困难。但也要平衡用户体验——太繁琐的验证会让用户想办法绕过,反而更不安全。