OAuth2 vs OpenID Connect:有什么区别?

发布: (2026年3月8日 GMT+8 00:22)
4 分钟阅读
原文: Dev.to

Source: Dev.to

Cover image for OAuth2 vs OpenID Connect: What's the Difference?

OAuth2 实际是什么

OAuth2 是一个 授权框架。它允许应用程序在 不共享用户凭证 的情况下代表用户访问资源。客户端不需要向每个服务发送用户名和密码,而是从 授权服务器 获取一个 访问令牌(access token)。该令牌随后可用于向 资源服务器 请求资源。

示例场景
用户允许第三方应用访问其在另一服务中存储的数据。OAuth2 安全地实现了这种委托。

为什么 OAuth2 不是认证

一个常见的误解是 OAuth2 用于认证。OAuth2 告诉应用程序 用户是谁;它只回答以下问题:

这个客户端是否被允许访问该资源?

访问令牌证明客户端拥有权限,但它不提供关于用户的可靠身份信息。正因为此,单独使用 OAuth2 不足以完成认证

OpenID Connect 增加了什么

OpenID Connect(OIDC)是 建立在 OAuth2 之上的一层,它补充了缺失的部分:认证。OIDC 引入了一种新令牌——ID Token,其中包含已认证用户的身份信息,例如:

  • 用户标识符 (sub)
  • 发行者 (iss)
  • 认证时间
  • 令牌过期时间 (exp)

这使得客户端应用能够确认 用户的身份

技术用途
OAuth2授权
OpenID Connect认证

ID Token 与 Access Token

了解这两种令牌的区别很重要。

Access Token

用于访问受保护资源。

GET /api/user-data
Authorization: Bearer <access_token>

资源服务器验证令牌后返回请求的数据。

ID Token

用于 标识已认证的用户。客户端可以检查该令牌以获取身份信息。ID Token 中常见的字段包括:

  • sub(用户标识符)
  • iss(发行者)
  • aud(受众)
  • exp(过期时间)

ID Token 通常实现为 JWT

实际示例流程

一个简化的 OpenID Connect 流程如下:

  1. 用户尝试登录应用。
  2. 应用将用户重定向到 授权服务器
  3. 用户进行认证(登录、MFA 等)。
  4. 授权服务器颁发:
    • 访问令牌(Access Token)
    • ID 令牌(ID Token)
  5. 应用使用 ID 令牌 来识别用户。
  6. 访问令牌 用于向 API 请求数据。

结论

OAuth2 与 OpenID Connect 协同工作,但承担不同角色:

  • OAuth2 提供 授权
  • OpenID Connect 通过在 OAuth2 之上添加身份信息来提供 认证

理解这一区别有助于开发者设计安全且可扩展的认证系统。

如果想深入了解不同的 OAuth2 流程,可以阅读我之前的文章。

0 浏览
Back to Blog

相关文章

阅读更多 »