1.OIDC的组成部分
OpenID Connect(OIDC) 有几个关键组成部分,它们共同协作实现身份验证和授权的功能。以下是 OIDC 的核心组件:
1.1.身份提供者(IdP, Identity Provider)
身份提供者 是负责执行身份验证的服务,验证用户的身份并向客户端(应用程序)颁发 ID Token 和 Access Token。身份提供者通常是可信的第三方,如 Google、Facebook、Apple 等。
身份提供者的职责:接收用户凭据(如用户名和密码),验证其身份,并生成 ID Token,确保客户端能信任用户身份。
1.2.客户端(Client)
客户端 是请求用户身份验证的应用程序或服务。客户端通过与身份提供者的交互来获取令牌,并使用这些令牌验证用户身份和访问受保护的资源。
客户端的职责:发起身份验证请求,处理从身份提供者返回的 ID Token,并根据 Access Token 访问受保护的资源服务器。
1.3.授权服务器(Authorization Server)
授权服务器 是一个服务,负责处理 OAuth 2.0 授权流程。它会在用户同意授权后,颁发 授权码(Authorization Code),并基于授权码向客户端发放 ID Token 和 Access Token。
授权服务器的职责:在身份提供者的协作下,处理客户端的授权请求,确保令牌安全地传递给客户端。
1.4.资源服务器(Resource Server)
资源服务器 是存储和管理受保护资源的服务器,它通过验证客户端的 Access Token 来控制对资源的访问。资源服务器不会直接参与身份验证,而是负责授权访问资源。
资源服务器的职责:验证 Access Token 是否有效,并根据其权限授予客户端访问用户数据的权限。
1.5.最终用户(End User)
最终用户 是正在使用应用程序并需要进行身份验证的人。用户会向身份提供者提供其登录凭据,完成身份验证流程。
用户的角色:用户的身份信息会通过身份提供者验证,进而让客户端确认该用户的真实身份。
1.6.ID Token
ID Token 是 OIDC的核心,是一种用于证明用户身份的令牌,通常采用 JWT(JSON Web Token) 格式。ID Token 包含用户身份信息(如用户名、邮箱等)以及与身份验证相关的元数据(如签发时间、过期时间等)。
ID Token 的职责:提供用户的身份信息,供客户端验证用户身份。
1.7.Access Token
Access Token 是 OAuth 2.0 中的授权令牌,客户端通过它可以向资源服务器请求受保护的资源。Access Token 通常不包含用户身份信息,而是用于授予访问权限。
Access Token 的职责:让客户端可以代表用户访问受保护的资源(如API)。
1.8.UserInfo Endpoint
UserInfo Endpoint 是 OIDC 提供的一个API 接口,允许客户端使用 Access Token 请求更多的用户信息(如用户的详细资料、权限等)。
UserInfo Endpoint 的职责:作为获取用户详细信息的通道,补充 ID Token 所无法覆盖的用户数据。
2. OIDC 关键组件的交互流程
Step1用户登录:用户通过客户端发起身份验证请求,重定向到身份提供者的登录页面。
Step2身份验证:身份提供者验证用户的凭据,生成 ID Token 和 Access Token。
Step3令牌返回:客户端接收到 ID Token 以确认用户身份,并使用 Access Token 访问资源服务器中的受保护资源。
Step4资源访问:客户端使用 Access Token 与资源服务器交互,资源服务器通过验证 Access Token 允许或拒绝访问。