Skip to Content
MUZINET-NOTE 4.0 is released 🎉

🧩 1. OpenID Connect 1.0 简介

OpenID Connect 1.0 是一个简单的身份层,建立在 OAuth 2.0 协议(RFC6749) 之上。
它允许客户端在授权服务器执行身份验证后,验证最终用户的身份,并以可互操作的 REST 方式获取有关最终用户的基本概要信息。


🧠 核心功能

OpenID Connect Core 1.0 规范定义了核心功能:

  • ✅ 基于 OAuth 2.0 的身份验证机制
  • ✅ 使用 声明(Claims) 传递有关最终用户的信息

该规范还描述了使用 OpenID Connect 时的 安全隐私注意事项


🏗 背景

OAuth 2.0 授权框架 (RFC6749)
OAuth 2.0 授权令牌使用规范 (RFC6750) 提供了一个通用的框架,
供第三方应用程序获取和使用对 HTTP 资源的有限访问权限。

然而:

🔸 OAuth 2.0 只定义了获取和使用访问令牌的机制,
未定义提供身份信息的标准方法
因此如果不扩展 OAuth 2.0,就无法提供最终用户的身份验证信息。

在阅读本规范之前,用户应熟悉上述 OAuth 2.0 相关规范。


⚙️ OpenID Connect 的工作原理

OpenID Connect 通过扩展 OAuth 2.0 授权过程来实现身份验证。
客户端在授权请求中包含 openid 作用域值,以启用该扩展。

有关身份验证的信息将以 ID Token 的形式返回:
这是一个 JSON Web Token (JWT)


📌 术语映射

名称含义
OpenID Provider (OP)实现 OpenID Connect 的 OAuth 2.0 授权服务器
Relying Party (RP)使用 OpenID Connect 的 OAuth 2.0 客户端
ID Token含身份声明的 JWT 令牌

🔍 前提条件

本规范假设:

  • RP(依赖方)已经从 OP(OpenID 提供商)获取配置信息,
    包括授权端点与令牌端点的位置。
    通常通过 Discovery(发现机制) 获取(参见 OpenID Discovery 1.0 )。
  • RP 已获取足够的身份信息以及调用 OP 所需信息。
    通常通过 Dynamic Registration(动态注册) 获取。

📚 前序版本


📖 1.1. 需求表示法和约定

本文件中的以下关键词需按照 RFC 2119 的描述进行解释:

MUST, MUST NOT, REQUIRED, SHALL, SHALL NOT, SHOULD, SHOULD NOT,
RECOMMENDED, NOT RECOMMENDED, MAY, OPTIONAL

  • .txt 版本中,用引号括起的值表示字面值。
  • 在协议消息中使用这些值时,引号 MUST NOT 作为值的一部分被包含。
  • 在 HTML 版本中,按字面意思使用的值用固定宽度字体表示。

本规范中所有对 JWS / JWE 数据结构的使用均采用:

  • JWS Compact Serialization
  • JWE Compact Serialization

不使用 JSON 序列化格式。


📘 1.2. 术语(Terminology)

📗 来源术语

OAuth 2.0 [RFC6749]

Access Token、Authorization Code、Authorization Endpoint、Authorization Grant、Authorization Server、Client、Client Authentication、Client Identifier、Client Secret、Grant Type、Protected Resource、Redirection URI、Refresh Token、Resource Server、Response Type、Token Endpoint。

JSON Web Token (JWT) [JWT]

Claim Name、Claim Value、JWT Claims Set、Nested JWT。

JSON Web Signature (JWS) [JWS]

Base64url Encoding、Header Parameter、JOSE Header。

RFC 7230 [RFC7230]

User Agent。

OAuth 2.0 Multiple Response Type [OAuth.Responses]

Response Mode。


📘 定义的新术语

术语定义
Authentication用于在实体与其所呈现身份之间建立足够信任的过程。
Authentication Request使用 OpenID Connect 扩展参数和作用域的 OAuth 2.0 授权请求,要求授权服务器(OP)对终端用户进行身份验证并返回给客户端(RP)。
Authentication ContextRP 在授权决策前可以要求的身份验证信息(例如认证方法或保证级别)。
Authentication Context Class在特定上下文中被认为等价的一组身份验证方法。
Authentication Context Class Reference身份验证上下文类的标识符。
Authorization Code Flow一种 OAuth 2.0 流程,其中授权码从授权端点返回,令牌从令牌端点返回。
Authorization Request[RFC6749] 中定义的 OAuth 2.0 授权请求。
Claim关于实体的一段声明信息。
Claim Type表示声明值的语法。本规范定义了普通、聚合和分布式声明类型。
Claims Provider可返回实体声明信息的服务器。

🧠 本章节中的术语定义具有规范性,对实现方具有约束力。
所有以大写开头的术语(如 “Issuer Identifier”)均引用这些定义。


📚 背景参考

  • Internet Security Glossary, Version 2 [RFC4949]
  • ISO/IEC 29115 实体身份验证保证 [ISO29115]
  • ITU-T X.1252 [X.1252]

🔄 1.3. 概述(Overview)

OpenID Connect 协议的抽象过程如下:

  1. RP(客户端)OP(提供商) 发送请求。
  2. OP 对终端用户进行身份验证并获得授权。
  3. OP 返回一个 ID Token,通常还包括一个 Access Token
  4. RP 使用 Access Token 调用 UserInfo 端点
  5. UserInfo 端点 返回关于用户的声明(Claims)。

🧭 流程图示

+--------+ +--------+ | | | | | |---------(1) AuthN Request-------->| | | | | | | | +--------+ | | | | | | | | | | | End- |<--(2) AuthN & AuthZ-->| | | | | User | | | | RP | | | | OP | | | +--------+ | | | | | | | |<--------(3) AuthN Response--------| | | | | | | |---------(4) UserInfo Request----->| | | | | | | |<--------(5) UserInfo Response-----| | | | | | +--------+ +--------+

⚙️ 流程说明

  1. 身份验证请求 (AuthN Request) RP 向 OP 发送请求,包含所需的作用域(Scopes)、重定向 URI 等参数。

  2. 身份验证与授权 (AuthN & AuthZ) OP 验证终端用户身份,并在获得同意后授予权限。

  3. 身份验证响应 (AuthN Response) OP 将 ID Token 与(可选)Access Token 返回给 RP,用于身份验证和访问。

  4. UserInfo 请求 (UserInfo Request) RP 使用 Access Token 向 UserInfo 端点请求用户信息。

  5. UserInfo 响应 (UserInfo Response) UserInfo 端点返回用户的声明信息(如姓名、邮箱)。


💬 总结: OpenID Connect 通过在 OAuth 2.0 框架之上添加身份层, 使客户端不仅能获取访问令牌,还能获取验证用户身份的 ID Token, 从而实现统一的身份认证机制。