什么是 OIDC:从我们为何需要它到它如何工作
了解什么是 OIDC,它为何需要,以及它如何工作。了解 OIDC 如何扩展 OAuth 2.0 用于身份验证,理解其核心组件,包括 ID 令牌、范围和用户信息端点。
了解什么是 OIDC,它为何需要,以及它如何工作。了解 OIDC 如何扩展 OAuth 2.0 用于身份验证,理解其核心组件,包括 ID 令牌、范围和用户信息端点。
OpenID Connect (OIDC) 是一种基于 OAuth 2.0 构建的身份认证协议。虽然 OAuth 2.0 仅提供授权功能,OIDC 增加了认证功能,为用户授权和认证场景提供了更标准化的解决方案。
简单来说:OIDC = 授权协议 + 身份认证。
为了理解为什么需要 OIDC,让我们先探讨一下 OAuth 2.0 的核心概念和工作流程,以及它在实际应用中的局限性。通过分析具体场景,我们将看到为什么我们需要轻于 OAuth 2.0 的 OIDC。
OAuth 2.0(开放授权)是一种授权协议,它让用户能够授权第三方应用访问他们的资源,而无需共享他们的凭证,如用户名和密码。它涉及四个主要角色:
一个典型的 OAuth 2.0 授权流程如下所示:
如图所示,OAuth 2.0 主要负责向第三方客户端颁发访问令牌以访问用户资源。
OAuth 2.0 协议仅关注于颁发访问令牌。资源服务器验证这些令牌并返回授权资源。然而,资源服务器并不知道用户的身份。
这在早期的互联网生态中并不是一个重大问题。
然而,随着像 Google、Facebook、Twitter 和 Github 这样的平台的出现,它们开始提供丰富的用户资源,这对于第三方应用变得很有价值。
虽然 OAuth 2.0 擅长授权第三方访问用户资源,它也有局限性。一个典型的场景是:由于用户信息也是一种资源,当第三方应用需要访问基本用户信息,不同平台(如 Google、Facebook、Twitter)以不同格式返回用户信息,给开发者带来挑战。
OIDC 是为了解决这些挑战而创建的。
为了在 OAuth 2.0 的基础上启用用户身份认证并解决其局限性,OIDC 引入了三个角色:
OP 是核心角色,提供 OAuth 2.0 的授权功能并将用户信息视为独立资源。
OIDC 的认证过程与 OAuth 2.0 类似,但由于 OP 结合了授权服务器和资源服务器的角色,它返回访问令牌和 ID 令牌。ID 令牌包含用户身份信息,RP 可以通过验证 ID 令牌来确认用户身份。
一个典型的工作流程如下所示:
这标准化了不同平台获取用户信息的方式,消除了第三方应用处理特定平台差异的需要。
当用户授权第三方应用时,OP 返回 OAuth 2.0 访问令牌和 JWT 格式的 ID 令牌。此 ID 令牌包含用户身份信息,如用户 ID、用户名、邮箱和头像。RP 可以通过验证 ID 令牌确认用户身份。
作为 JWT,ID 令牌包含标准化的声明,包括以下必需的核心声明:
iss (签发者):颁发 ID 令牌的 OpenID 提供者的唯一标识符sub (主题):用户的唯一标识符aud (受众):接收 ID 令牌的客户端应用的标识符exp (过期时间):ID 令牌过期时间iat (签发时间):ID 令牌的签发时间有关 ID 令牌的详细信息,请参阅:ID 令牌。
用户信息端点是 OP 提供的标准化 HTTP API 用于获取经过身份验证的用户详细信息。通过使用访问令牌向该端点发送 GET 或 POST 请求,可以接收到 JSON 格式的用户信息。 返回的数据包括标准化字段,如唯一用户 ID (sub)、用户名 (name)、邮箱和头像。
获取用户信息的过程与在 OAuth 2.0 中访问受保护资源的模式相同。通常,从用户信息端点获取的用户信息比 ID 令牌中获取的更全面,因为 ID 令牌主要用于身份认证和基本用户信息。
有关用户信息端点的详细信息,请参阅:用户信息端点。
请注意,从用户信息端点接收到的用户信息取决于在授权期间请求的范围和权限。
OIDC 中的范围定义了 RP 可以访问的用户信息。OIDC 定义了标准范围,其中 openid 范围在 OIDC 认证流程中是强制性的。
常见的标准范围包括:
openid: 表示 OIDC 身份验证请求profile: 基本用户信息,如姓名和头像email: 用户的邮箱信息phone: 用户的电话号码address: 用户的地址信息不同的范围返回不同的用户信息。例如,请求 openid profile email 返回 ID 令牌和用户信息中的基本用户信息和邮箱,而 openid profile email phone address 包括电话号码和地址信息。
OIDC 不仅仅是一个身份认证协议;它是一个构建灵活、可扩展的身份管理系统的强大工具。通过为 OAuth 2.0 添加认证层、标准化用户信息资源,并为扩展的身份管理功能奠定了基础,OIDC 启用了各种身份管理场景:
OIDC 的灵活性适应不断发展的身份管理需求。许多身份管理系统都是基于 OIDC 构建的,例如 Logto,提供 SSO、组织管理和权限管理功能。