banner
约 300 字
1 分钟

身份认证与访问控制:从密码到 MFA

摘要

区分认证与授权,讲解加盐慢哈希存密码、会话管理、MFA(TOTP/WebAuthn)、SSO(OAuth2/OIDC/SAML)、RBAC/ABAC 与常见越权漏洞防护。

身份认证与访问控制:从密码到 MFA

引言

“你是谁”(认证 Authentication)和“你能做什么”(授权 Authorization)是安全的两道门。本文理清概念,并给出落到实处的实践。

一、认证 vs 授权

  • 认证:验证身份——“你是你声称的那个人吗?”

  • 授权:验证权限——“你被允许做这件事吗?”

两者常被混用,但出问题时排查方向完全不同(登不进是认证问题,能进但看到不该看的,是授权问题)。

二、密码怎么存才安全

永远不要明文存密码。正确做法是加盐慢哈希:

Python
import hashlib, os
salt = os.urandom(16)
stored = hashlib.pbkdf2_hmac('sha256', pwd, salt, 100000)

更推荐 argon2 / bcrypt。加盐抵御彩虹表;慢哈希对抗暴力破解。还可加 “pepper”(全局密钥)进一步提升。

三、会话管理

登录后靠会话保持状态,要点:

  • Cookie 加 HttpOnly + Secure + SameSite

  • 会话 ID 随机且足够长,定期轮换。

  • 登出要真正销毁服务端会话。

四、多因素认证(MFA)

单靠密码不够,MFA 增加第二因子:

  • 你知道的(密码)

  • 你拥有的(手机 TOTP、硬件 Key)

  • 你本身的(指纹、人脸)

实现方式:

  • TOTP(Google Authenticator 类):基于时间的一次性口令。

  • WebAuthn / FIDO2:基于公钥密码学的硬件/平台认证,抗钓鱼(凭证绑定域名)。

  • 推送确认:手机收到登录请求点同意。

即便密码泄露,没有第二因子也登不进去。

五、单点登录(SSO)

  • OAuth 2.0:授权框架,常配合 OIDC 做认证。

  • SAML:企业常用,XML 体系。

  • 用 SSO 减少密码暴露面,但要保护好 IdP(身份提供方)本身。

六、访问控制模型

  • RBAC(基于角色):权限绑在角色上,用户被赋予角色。

    纯文本
    用户 → 角色(审计员) → 权限(只读日志)
  • ABAC(基于属性):按用户/资源/环境属性动态决策,更细但更复杂。

七、常见漏洞(OWASP)

  • 失效的访问控制(Broken Access Control):长期位居 OWASP Top 10 前列。

  • IDOR(不安全的直接对象引用):靠改 URL 里的 ID 越权访问他人数据。

  • 权限提升:普通用户调到管理员。

防护:服务端每次都校验权限(不能只靠前端隐藏按钮)、用间接引用、做越权测试。

八、审计与监控

关键操作留痕、异常登录告警(新设备、异地)、定期复核权限(离职即回收)。

小结

稳健的身份体系 = 强密码存储 + 安全会话 + MFA + 最小权限授权 + 持续审计。把这几件做扎实,账户被攻破的概率会大幅下降。最后一篇,我们聊聊最容易被人忽略的“人”这一环。

延伸

  • OWASP 身份认证备忘单

  • 下一篇:《社会工程学与钓鱼攻击防范》

END