引言:信任的终结

2010 年,Forrester 首席分析师 John Kindervag 提出"零信任"(Zero Trust)模型,其核心信条简明扼要:永不信任,始终验证(Never Trust, Always Verify)。这一理念的提出,直接宣告了传统边界安全模型的终结。

传统安全架构基于一个隐含假设:网络内部是可信的,外部是不可信的。正如城堡与护城河,一旦攻破边界,内部便如入无人之境。然而,在云计算、远程办公、供应链协作成为常态的今天,网络边界已不复存在。VPN 的脆弱性、内部威胁的频发、横向移动的肆虐,都在不断验证一个事实:边界防御已死。

零信任不是某一款产品或技术,而是一种安全范式的根本转变。它将安全防护的重心从网络位置(Where)转移到身份主体(Who)、访问上下文(Context)和持续风险评估(Continuous Assessment)上。而身份认证(Authentication)与授权(Authorization),正是零信任架构的第一道关卡。

一、零信任身份认证的核心原则

零信任的身份认证体系建立在以下五大原则之上:

1.1 显式验证(Verify Explicitly)

所有访问请求都必须经过认证和授权,无论请求来自内部还是外部。认证不是简单的用户名 密码,而是融合多因素认证(MFA)、设备健康状态、时空上下文等多维信号的综合评估。

1.2 最小权限(Use Least Privilege)

每次授权仅赋予完成任务所需的最小权限集,并且权限具有时效性。这与传统的静态角色权限模型截然不同——零信任环境下的权限是动态的、短期的、可撤销的。

1.3 假设 breach(Assume Breach)

设计安全体系时,必须假设攻击者已经在网络内部。这意味着:每次敏感操作都需要重新验证会话风险,关键资源需要额外保护层,所有行为都需要审计溯源。

1.4 持续验证(Continuous Verification)

认证不是一次性事件,而是一个持续的过程。用户的行为模式、设备状态、网络环境在使用期间不断变化,安全系统需要实时评估这些变化,并在风险升高时触发逐步升级认证(Step-up Authentication)。

1.5 身份即边界(Identity is the Perimeter)

在零信任架构中,身份取代了网络位置成为新的安全边界。每个用户、每个服务(Service Account)、每个IoT设备都拥有独立可验证的身份标识,所有跨身份的访问都需要明确授权。

二、协议深度解析:OAuth 2.0 与 OIDC

现代身份认证的工业标准基石是 OAuth 2.0 授权框架和构建在其上的 OpenID Connect(OIDC)认证层。理解这两者的工作机制,是工程落地的第一步。

2.1 OAuth 2.0 授权框架的精髓

OAuth 2.0 解决的核心问题是:如何让第三方应用在用户授权下,有限度地访问受保护的资源。它引入了四个角色:资源所有者(用户)、客户端(第三方应用)、授权服务器(AS)和资源服务器(RS)。

授权码模式(Authorization Code Flow)是安全性最高的流程,适用于有后端服务器的 Web 应用:

  1. 客户端构造授权请求,携带 client_id、redirect_uri、scope、state(CSRF 防护)、code_challenge(PKCE 防护)
  2. 用户登录授权服务器,完成 MFA 认证
  3. 授权服务器回 redirect_uri 传递授权码
  4. li>客户端后端用授权码向 token endpoint 换取 access_token 和 id_token(OIDC)
  5. 客户端用 access_token 访问资源服务器的 API

这里有两个容易被忽视的安全关键点:

PKCE(Proof Key for Code Exchange,RFC 7636):最初设计用于防止移动端原生应用的授权码拦截攻击。核心机制是客户端在初始请求时生成随机 code_verifier 并计算其 SHA-256 哈希作为 code_challenge 发送。换取 token 时必须提交原始 code_verifier,授权服务器验证哈希匹配后才能颁发 token。这一流程确保了即使授权码被中间人截获,没有 code_verifier 也无法换取 token。2022 年 OAuth 2.1 草案已强制要求所有客户端(包括 Web 后端)使用 PKCE。

state 参数与 CSRF 防护:客户端在发起授权请求时生成不可预测的 state 值,并存储在用户的会话中。授权服务器回调时必须返回相同的 state 值。这一机制防止了攻击者利用自己在授权服务器上的登录会话,向受害者应用注入授权码的 CSRF 攻击。

2.2 OIDC:构建在 OA2.0 之上的认证层

OAuth 2.0 是授权协议,不是认证协议。OIDC(OpenID Connect 1.0)在 OAuth 2.0 之上增加了认证能力,其核心是引入了 id_token——一个带有标准 claims 的 JWT(JSON Web Token),明确声明了用户的身份信息。

ID Token 中包含的关键 claims:

  • iss(Issuer):签发机构的唯一标识,必须与发现文档中的值匹配
  • sub(Subject):用户在签发机构范围内的唯一标识,不可变
  • aud(Audience):该 token 的预期接收方,必须包含客户端的 client_id
  • exp(Expiration):过期时间戳,通常设置为较短的有效期(如 5-15 分钟)
  • iat(Issued At):签发时间
  • auth_time:用户完成认证的时间
  • nonce:用于防止重放攻击的随机值,必须与认证请求中的 nonce 匹配

ID Token 的安全验证清单是一个工程实践中必须严格遵守的流程:

  1. 验证 iss 是否与预期的身份提供商匹配
  2. 验证 aud 是否包含自身 client_id
  3. 验证 token 是否过期(exp
点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部