ISO/IEC 26131:2024 OpenID Connect Core 1.0 — 现代身份验证的身份层

理解在OAuth 2.0之上构建的去中心化身份验证核心协议

一、理解OpenID Connect核心协议

ISO/IEC 26131:2024定义了OpenID Connect Core 1.0协议,这是一个构建在OAuth 2.0协议之上的轻量级身份层。它使客户端(依赖方)能够基于授权服务器(OpenID提供者)执行的身份验证来验证终端用户的身份,并以可互操作、REST风格的方式获取用户基本档案信息。

OpenID Connect将身份验证实现为OAuth 2.0授权流程的扩展。客户端通过在授权请求中包含openid范围值来请求此扩展。身份验证结果以称为ID Token的JSON Web Token(JWT)形式返回,其中包含关于身份验证事件的声明(Claims)。

ID Token是OpenID Connect的核心创新。与仅提供访问令牌用于API授权的OAuth 2.0不同,ID Token使用带有数字签名的JWT结构,直接将可验证的身份信息传递给客户端应用程序。

二、三种身份验证流程

该标准定义了三种主要的身份验证流程,适用于不同的应用场景:

流程类型 来自授权端点的令牌 来自令牌端点的令牌 适用场景
授权码流程 授权码 ID Token + 访问令牌 带后端的服务端Web应用
隐式流程 ID Token + 访问令牌 单页应用(传统方式)
混合流程 授权码 + 部分令牌 剩余令牌 高安全原生应用
由于令牌暴露在URL片段中的安全风险,不建议新应用使用隐式流程。带有PKCE(代码交换证明密钥)的授权码流程现在是所有客户端类型(包括SPA和原生应用)的首选方法。

三、声明、范围与UserInfo端点

OpenID Connect定义了用于传递用户信息的标准声明。声明是关于实体的事实信息,按逻辑分组为不同的范围:

范围 返回的声明 说明
openid sub(主题标识符) 必选范围,表示OpenID Connect请求
profile 姓名、头像、地区等 基本档案信息
email 邮箱地址及验证状态 带验证状态的电子邮件地址
address 地址(JSON对象) 结构化邮政地址
phone 电话号码及验证状态 带验证状态的电话号码

UserInfo端点是一个OAuth 2.0受保护资源,返回关于已认证终端用户的声明。当访问此端点时,客户端提供访问令牌,端点以JSON文档形式返回请求的声明。

对于实施SSO的工程团队,始终请求最小必要范围。openid profile email组合覆盖了大多数身份验证需求,同时避免过度暴露个人身份信息(PII)。

四、生产部署的安全考量

ISO/IEC 26131:2024对安全性给予了大量关注。关键考量包括:

  • TLS要求:依赖方与OpenID提供者之间的所有通信必须使用TLS,防止令牌被截获和中间人攻击。
  • 令牌重放防护:nonce参数将会话与ID Token关联,即使令牌被截获也能防止重放攻击。
  • 成对标识符(PPID):为防止跨不同依赖方的关联,标准支持每个客户端应用唯一的成对假名标识符。
  • 签名和加密请求:请求对象可以签名(JWS)和加密(JWE),确保通过引用或值传递时的请求完整性和机密性。
切勿在不验证签名、签发者、受众和过期时间的情况下接受ID Token。签名验证缺失或不正确是生产系统中发现的最常见OpenID Connect安全漏洞。

五、工程实践与实施指南

实施OpenID Connect集成时,请考虑以下工程最佳实践:

  • 使用成熟的库:使用经过认证的OpenID Connect库,而不是从头实现协议流程。OpenID基金会维护着认证实现清单。
  • 实施正确的重定向URI验证:redirect_uri必须与注册值完全匹配。使用精确字符串比较——任何模式匹配都可能引入开放重定向漏洞。
  • 轮换签名密钥:OpenID提供者应定期轮换非对称签名密钥,并通过JWKS端点公开新密钥。客户端应使用适当的TTL缓存密钥。
  • 处理时钟偏差:ID Token验证必须考虑系统间的时钟偏差。推荐容忍度不超过几分钟。

常见问题

问:OpenID Connect和OAuth 2.0有什么区别?

答:OAuth 2.0是一个授权框架,使用访问令牌授予资源访问权限。OpenID Connect是OAuth 2.0之上的身份验证层,通过ID Token添加了身份验证功能。使用OpenID Connect,您同时获得身份验证(用户是谁)和授权(用户可以访问什么)。

问:没有OAuth 2.0可以使用OpenID Connect吗?

答:不可以。OpenID Connect是专门设计为OAuth 2.0的扩展,它利用OAuth 2.0的流程、端点和令牌机制。您必须拥有OAuth 2.0基础设施才能实施OpenID Connect。

问:OpenID Connect身份验证的典型延迟是多少?

答:在实际应用中,当OpenID提供者配置良好时,身份验证流程通常在一秒内完成。关键路径包括TLS握手、身份验证验证、JWT签名和令牌响应交付。使用CDN加速端点和优化JWK缓存可以显著降低延迟。

问:OpenID Connect适用于物联网和移动应用吗?

答:是的。带有PKCE的授权码流程专门为无法安全保存客户端密钥的移动和原生应用设计。对于HTTP能力有限的物联网设备,标准也支持更简化的配置文件。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注