Skip to content

认证授权

认证授权是软件系统一个基础功能模块,是确保系统安全的基础能力。无论多小的系统,都需要建立认证授权机制,来保护系统的资源和数据安全。

除非你的系统是一个完全的公开系统比如本站点,不需要记录用户信息,否则总是需要建立面向用户的认证授权机制。

接触过软件系统的,我们一般会遇到以下认证授权场景:

  • 用户名/密码登录
  • OAuth 2.0,通过第三方平台授权登录
  • SSO 单点登录,用户只需要登录一次可访问授信的多个系统,一般是子域名系统
  • PAT(Personal Access Token),系统间 API 调用,无需用户名/密码登录

因为我负责的项目建设中存在多个系统间的能力调用,都会遇到认证授权问题,因此我决定开辟一个专栏来聚焦认证授权相关的技术实践,大家一起互相交流学习。

特别地,思考在大型企业中的 4A 安全管理和审计等问题,这是一个非常重要的主题。

系列文章

TODO 待补充

文章简介
认证授权基础认证与授权的核心概念、Cookie/Session 机制、凭证存储方案
Cookie 安全问题CSRF 攻击原理、同源策略、Cookie 安全属性
Session 扩展分布式 Session、Redis 存储、高可用架构

知识图谱


常见术语

会话与令牌

术语说明
Session服务端存储的用户会话数据,通过 Session ID 关联
Cookie浏览器存储的小型文本文件,常用于携带 Session ID
Token访问凭证的统称,通常是自包含的字符串
JWTJSON Web Token,一种流行的自包含令牌格式
Access Token访问令牌,用于调用 API
Refresh Token刷新令牌,用于获取新的 Access Token

协议与标准

术语说明
OAuth 2.0开放授权协议,定义"第三方授权"流程
OIDCOpenID Connect,OAuth 2.0 的上层协议,支持身份验证
SAML 2.0基于 XML 的 SSO 协议,企业级
LDAP轻量级目录访问协议,常用于内网用户管理

访问控制模型

模型说明
RBACRole-Based Access Control,基于角色的访问控制
ABACAttribute-Based Access Control,基于属性的访问控制
ACLAccess Control List,访问控制列表
PBACPolicy-Based Access Control,基于策略的访问控制

技术选型决策树

根据业务场景选择合适的认证方案:

场景对照表

场景推荐方案说明
微服务 API 调用API Key + 签名无状态,适合服务间调用
SPA / 移动端JWT无状态,前端存储需注意 XSS
传统 Web 应用Session + Cookie服务端控制,安全性较高
第三方应用授权OAuth 2.0经典场景如"使用 Google 登录"
企业级 SSOOIDC / SAML 2.0支持多身份提供商
IoT 设备API Key / 证书设备认证的特殊性

JWT vs Session 对比

维度JWTSession
存储位置客户端服务端(通常 Redis)
扩展性水平扩展简单需共享 Session
失效机制难以主动失效可直接删除 Session
数据大小较大(包含完整信息)较小(仅存 Session ID)
适用场景跨域 API、无状态需要快速撤销权限

安全最佳实践

  1. 传输安全:始终使用 HTTPS
  2. 凭证存储:密码使用 bcrypt/argon2 哈希
  3. Token 安全:Access Token 短期有效,Refresh Token 单独存储
  4. Cookie 安全:设置 HttpOnly、Secure、SameSite
  5. 防止 CSRF:使用 SameSite Cookie 或 CSRF Token
  6. 防止 XSS:严格输出编码,不信任用户输入

下篇预告

下一篇将深入探讨 Cookie 安全问题,了解 CSRF 攻击原理与防护措施。