OAuth2 vs OpenID Connect:有什么区别?
Source: Dev.to

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 流程如下:
- 用户尝试登录应用。
- 应用将用户重定向到 授权服务器。
- 用户进行认证(登录、MFA 等)。
- 授权服务器颁发:
- 访问令牌(Access Token)
- ID 令牌(ID Token)
- 应用使用 ID 令牌 来识别用户。
- 访问令牌 用于向 API 请求数据。
结论
OAuth2 与 OpenID Connect 协同工作,但承担不同角色:
- OAuth2 提供 授权。
- OpenID Connect 通过在 OAuth2 之上添加身份信息来提供 认证。
理解这一区别有助于开发者设计安全且可扩展的认证系统。
如果想深入了解不同的 OAuth2 流程,可以阅读我之前的文章。