OAuth 是一个关于授权的开放网络标准,它允许第三方网站在用户授权的前提下访问用户在服务商那里存储的各种信息。实际上,OAuth 2.0 允许用户提供一个令牌给第三方网站,一个令牌对应一个特定的第三方网站,同时该令牌只能在特定的时间内访问特定的资源。用户在客户端使用用户名和密码在用户中心获得授权,然后客户端在访问应用是附上 Token 令牌。此时,应用接收到客户端的 Token 令牌到用户中心进行认证。

一般情况下,access token 会添加到 HTTP Header 的 Authorization 参数中使用,其中经常使用到的是 Bearer Token 与 Mac Token。其中,Bearer Token 适用于安全的网络下 API 授权。MAC Token 适用于不安全的网络下 API 授权。

OAuth2 令牌机制是微服务安全的认证基座,但微服务的安全面远不止认证:边界(网关)、服务间信任、数据与密钥、纵深防御四层都要设防。本文按”边界 → 认证授权 → 服务间 → 数据”四层给出完整安全模型。

第一层:边界安全(网关是唯一入口)

  • 所有外部流量只经 API 网关:WAF(防注入/CC)、TLS 终结、限流防刷、IP 信誉
  • 内网服务不暴露公网:K8s NetworkPolicy/安全组只允许网关与 mesh 内流量
  • 攻击面收敛原则:每多一个公网入口,安全边界就多一个缺口;管理后台/监控面板走 VPN 或零信任通道而非公网端口

第二层:认证与授权(OAuth2/OIDC + JWT)

  • 认证(你是谁):OIDC 在 OAuth2 之上补 id_token 与用户信息端点;密码/短信/第三方登录统一收敛到认证中心
  • 授权(你能干什么):OAuth2 四模式今天的主流是授权码 + PKCE(SPA/移动端)与 client_credentials(服务间);implicit 与 password 模式已不推荐
  • JWT 实践:access token 短时效(分钟级)+ refresh token 长时效可吊销;签名算法 RS256/ES256(非对称,资源服务只需公钥验签);payload 不放敏感信息(base64 可解码)
  • 授权粒度:网关做粗粒度(路由级角色),服务内做细粒度(资源级权限注解);RBAC/ABAC 按业务复杂度选
  • 吊销难题:JWT 无状态即难吊销——黑名单(Redis 存 jti)或短时效+refresh 轮换是两种补偿

第三层:服务间安全(内网不等于安全)

  • 服务间认证:mTLS(Service Mesh 自动签发轮换证书,零代码改造)或内部 JWT(client_credentials 签发)
  • 最小权限:服务 A 调服务 B 只授予所需接口(mesh AuthorizationPolicy / 网关内部路由白名单)
  • 防越权横向移动:内网任一服务被攻破后不应能遍历调用其他服务——零信任思想:从不信任,始终验证
  • 敏感操作二次校验:支付/改密等即使内网调用也要求用户级凭证或 TOTP

第四层:数据安全与密钥管理

  • 传输全链路 TLS(含内网,mesh 默认 mTLS)
  • 存储加密:敏感字段落库加密(手机号/身份证),密钥与数据分离存储
  • 密钥管理:KMS/Vault 集中管理、定期轮换、应用启动拉取或动态数据库凭据;配置文件与代码仓库零密钥(CI 扫描 secret)
  • 日志脱敏:trace/日志中手机号、token 打码——日志系统是常被忽略的敏感数据聚集地
  • 审计:敏感操作全量审计日志(谁在何时对什么做了什么),独立存储防篡改

纵深防御 checklist

  • 依赖安全:SCA 扫描第三方组件漏洞(Log4j 类事件的防线)、镜像扫描
  • 输入校验:全入口参数校验(网关 schema + 服务内 bean validation),防注入防越权参数
  • 越权双查:水平越权(A 看 B 的数据)靠”资源属主校验”,垂直越权靠权限注解——ID 可猜测即必须属主校验
  • 安全响应:漏洞响应流程、依赖升级窗口、红蓝对抗/渗透测试周期化

与单体安全的差异点

微服务把单体的”一道围墙”变成”多道门禁”:认证点从一处变多处(网关+服务间)、密钥数量级增长(每服务凭据/证书)、审计链路变长(跨服务串联 request_id)。安全的复杂度随服务数线性增长,因此必须平台化(mesh 管 mTLS、Vault 管密钥、统一认证中心管令牌),靠每个团队自觉必然漏防。

微服务安全 = 边界收敛 + 标准认证授权 + 服务间零信任 + 数据密钥平台化;OAuth2/JWT 是其中最重要的一块砖,但只砌这块砖的房子四面漏风。