这两个词经常被混着说,但它们回答的是两个不同的问题。

一句话区分

  • OAuth 2.0:授权框架。回答「这个应用能代表用户做什么」。
  • OIDC:构建在 OAuth 2.0 之上的认证层。回答「这个人是谁」。

OIDC 在 OAuth 流程中额外引入了 id_token,一个包含身份声明的 JWT。有了它,客户端才能确认登录者身份;仅靠 access_token 是做不到的。

为什么不能拿 access_token 当身份证

访问令牌是给资源服务器用的,它的受众(audience)是 API,不是客户端。把令牌解析后当作用户信息使用,会带来两个问题:令牌可能是不透明字符串无法解析;即使可解析,受众校验也会失效。

判断方式:如果这个令牌是发给 API 的,客户端就不该拿它来证明用户身份。

该选哪种授权模式

场景推荐模式
有后端的 Web 应用授权码模式
SPA / 移动端授权码 + PKCE
服务间调用客户端凭据模式
设备无浏览器设备授权模式

隐式模式(Implicit)已经不再推荐:令牌直接出现在 URL 片段里,泄露面太大。

落地检查清单

  • 回调地址是否精确白名单,而非通配
  • 是否校验 state 与 PKCE 的 code_verifier
  • 令牌有效期与刷新策略是否合理
  • 作用域是否按最小权限授予
O
Okta 产品团队

关注身份与访问管理,写可落地的方案,不写名词解释。

聊聊你的场景