1.OIDC简介
1.1.什么是OIDC
OpenID Connect(OIDC) 是一种基于 OAuth 2.0 的身份验证协议,用于验证用户身份并获取基本的用户信息。它将 OAuth 2.0 的授权能力扩展到了身份验证,主要用于实现单点登录(SSO)。
1.2. OIDC 与 OAuth 2.0 的关系
OAuth 2.0 是一个授权框架,允许应用程序以安全的方式代表用户访问资源。
OIDC 基于 OAuth 2.0,在此基础上增加了 身份验证(Authentication),通过 ID Token 让客户端获取用户身份信息。
主要区别:OAuth 2.0 主要用于授权访问用户资源,而 OIDC 则专注于身份验证,确保用户身份的真实性。
1.3.身份提供者(IdP)
身份提供者(Identity Provider, IdP) 是负责验证用户身份并颁发 ID Token的实体,常见的身份提供者有 Google、Facebook、Microsoft等。
身份提供者的职责是通过用户的登录凭据(例如用户名和密码)进行验证,并向客户端返回用户的身份信息。
1.4. ID Token
ID Token 是 OIDC 的核心,它是一个用于携带用户身份信息的令牌,通常采用 JWT(JSON Web Token) 格式。
ID Token 包含用户的身份声明(如用户名、邮箱、用户ID),以及 Token 的元数据(如签发时间、有效期等)。
1.5. Access Token(访问令牌)
Access Token 是用于 OAuth 2.0 的授权令牌,允许客户端访问受保护的资源服务器(例如用户的个人信息、文件等)。
OIDC 中虽然主要涉及身份验证,但 Access Token 仍然用于资源访问授权。
1.6. OAuth 2.0 授权流程
授权码流程(Authorization Code Flow):用户通过身份提供者进行身份验证后,返回授权码。客户端使用授权码换取 Access Token 和 ID Token。
隐式流程(Implicit Flow):用户直接获取 ID Token 和 Access Token,而不经过授权码阶段,适用于前端应用。
混合流程(Hybrid Flow):结合授权码和隐式流程的特点,适用于需要更多灵活性和安全性的场景。
1.7. JWT(JSON Web Token)
JWT 是 OIDC 中常用的格式,用于编码 ID Token 和 Access Token。它由三个部分组成:Header(头部)、Payload(载荷)、和 Signature(签名)。
通过 JWT,客户端可以解码用户身份信息,并验证 Token 是否由身份提供者合法签发。
1.8.用户声明(Claims)
Claims 是 ID Token 中携带的用户信息,比如用户ID、邮箱、登录时间等。
Claims 分为两类:标准声明(Standard Claims) 和 自定义声明(Custom Claims),前者是 OIDC 规范中定义的通用用户属性,后者由身份提供者或客户端自定义。
1.9. 单点登录(SSO)
SSO(Single Sign-On) 是 OIDC 的一个常见应用场景,允许用户通过一次身份验证即可访问多个应用或系统,而无需重复登录。
OIDC 通过 ID Token 使得不同的应用共享用户的身份认证信息,提供无缝的用户体验。
1.10.授权服务器(Authorization Server)
授权服务器是负责处理用户的身份验证和授权请求的服务器。
授权服务器发放ID Token 和 Access Token,确保客户端能够验证用户身份和获取授权访问的资源。
2. OIDC 和 OAuth 2.0 的关系
OpenID Connect(OIDC) 是一个基于 OAuth 2.0 协议的身份认证协议,允许应用程序通过身份提供者验证用户身份,并获取基本的用户信息(如用户名、电子邮箱等)。OIDC 主要用于单点登录(SSO)和身份验证,帮助应用程序无需直接处理用户凭据(例如用户名和密码),而是通过可信的身份提供者(如Google、Facebook等)完成身份验证。
OIDC 的核心目标 是在保持 OAuth 2.0 授权机制的基础上,增加身份验证能力,让客户端不仅能获得访问资源的授权,还能获取并验证用户的身份信息。
OAuth 2.0 是一个授权框架,允许用户授权第三方应用访问其资源(如个人文件、照片、联系人等),而无需向第三方应用提供实际的凭据(如用户名和密码)。它的核心目的是解决授权问题,而非身份验证。OAuth 2.0 中最常见的令牌是 Access Token,用于授权客户端访问用户的资源。
OIDC 在 OAuth 2.0 的基础上增加了身份验证层,解决了“谁是用户?”的问题。它引入了 ID Token,这是一种安全的、可验证的令牌,包含用户的身份信息(如用户名、邮箱、登录时间等)。OIDC 的关键点是让客户端能够通过第三方身份提供者验证用户身份,同时保持 OAuth 2.0 授权流程的简洁和安全性。
3. OIDC 与 OAuth 2.0 的主要区别
3.1.目的不同
OAuth 2.0:解决 授权 问题,允许应用获取访问用户资源的权限(如访问用户的文件、照片等)。
OIDC:解决 身份验证 问题,确保应用可以安全地验证用户身份。
3.2.令牌类型不同
OAuth 2.0:使用 Access Token 来授权客户端访问资源服务器,Access Token 中不包含用户身份信息。
OIDC:引入了 ID Token,用于向客户端证明用户身份,ID Token 中包含用户的身份声明(如用户名、邮箱等)。
3.3.工作流程
在 OAuth 2.0 中,客户端通过授权服务器获取 Access Token,然后使用 Access Token 访问资源服务器中的受保护资源。
在 OIDC 中,客户端除了获取 Access Token 之外,还会获取一个 ID Token,用于验证用户身份。
3.4.用户信息传递
OAuth 2.0 中无法直接获取用户身份信息(只能访问资源服务器的授权资源)。
OIDC 则通过 ID Token 或 UserInfo Endpoint 返回用户的身份信息。
4.OIDC 如何增强 OAuth 2.0
OIDC 使用 OAuth 2.0 作为授权框架,但在此基础上引入身份验证功能,允许客户端验证用户身份,并获取用户的基本信息。这使得 OIDC 能够在授权之外,为 Web 应用、移动应用以及 API 提供统一的身份认证方式。
5.以下是一些有用的OIDC工具和资源
Auth0:提供了全托管的身份验证和授权服务,支持OIDC和OAuth 2.0,适用于多种应用场景和语言。
Keycloak:一个开源的身份和访问管理解决方案,支持OIDC以及其他标准协议,可用于企业级和开发者使用。
Okta:提供了强大的身份验证和用户管理服务,支持OIDC以及其他标准协议,适合企业和开发人员使用。
IdentityServer:一个开源的身份和访问控制解决方案,支持OIDC和OAuth 2.0,广泛应用于.NET和ASP.NET应用程序。
Google Identity Platform:Google提供的身份验证解决方案,支持OIDC和OAuth 2.0,适用于集成Google账号登录的应用程序。
OAuth.com:提供了关于OIDC和OAuth 2.0的详细文档和指南,适合开发者学习和实施这些协议。
OIDC Debugger:一个在线工具,用于调试OIDC流程,可以帮助开发者理解和调试OIDC协议中的各个步骤和参数。
https://zq99299.github.io/note-book/oath2/02/05.html#%E9%A1%B9%E7%9B%AE%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C