OIDC5-OIDC 的工作流程
OIDC(OpenID Connect)是一个基于OAuth 2.0的身份验证协议,用于验证用户身份并获取关于用户的基本信息。它通过ID Token
来确认用户身份,并通过Access Token
授权访问受保护的资源。
以下是OIDC工作流程的主要步骤:
1.用户登录请求
用户登录请求:用户 → 应用程序(Client) → IdP (身份提供者) 登录页面
步骤:用户访问应用程序(Client),并触发登录请求。
行为:应用程序将用户重定向到身份提供者(Identity Provider,简称IdP,通常是OIDC认证服务器)的登录页面。
目标:用户通过该页面输入自己的凭据(如用户名和密码),进行身份验证。
2.身份验证与授权码发放
身份验证与授权码发放:IdP验证用户身份 → 授权码 → 重定向至应用程序
步骤:用户成功登录后,IdP会验证用户的凭据。如果验证成功,IdP将生成一个授权码(Authorization Code),并将其发送回应用程序。
行为:授权码是一个短期有效的临时凭据,通常通过浏览器重定向到应用程序的回调URL,作为查询参数附加在URL中。
目标:应用程序现在拥有一个可以用于后续请求的授权码。
3.请求 ID Token 和 Access Token
请求 ID Token 和 Access Token:应用程序 → IdP → 授权码交换 → 获取 ID Token 和 Access Token
步骤:应用程序使用授权码向IdP的令牌端点(Token Endpoint)发送POST请求,交换获取ID Token和Access Token。
请求内容:此请求包含授权码、客户端ID、客户端密钥(如果有)以及重定向URI(需要与初始请求的一致)。
行为:IdP验证授权码和客户端信息后,返回ID Token
和Access Token
。
ID Token:包含关于用户身份的声明(claims),以JWT(JSON Web Token)的格式返回。
Access Token:用于访问受保护的资源,通常也是JWT。
4.验证 ID Token 并确认身份
验证 ID Token 并确认身份:应用程序验证 ID Token → 确认用户身份
步骤:应用程序接收到ID Token后,必须验证它的有效性。
验证过程:
- 签名验证:检查ID Token的签名是否是由IdP的私钥签署的,以确保其真实性。
- Audience验证:检查ID Token中的aud(受众)声明,确保它的值是应用程序的客户端ID。
- 过期时间验证:验证exp字段,确认Token没有过期。
- Issuer验证:检查iss字段,确保Token是由正确的IdP颁发的。
目标:通过验证ID Token,应用程序可以确认用户的身份,并获得用户相关的声明信息(如用户名、电子邮件等)。
5.使用 Access Token 访问资源
使用 Access Token 访问资源:应用程序 → 资源服务器 → 使用 Access Token 访问资源 → 获取受保护的资源
步骤:应用程序使用Access Token向资源服务器(Resource Server)发送请求,以访问受保护的资源(如用户的个人信息或其他数据)。
行为:资源服务器接收到请求后,会验证Access Token的有效性:
1)检查签名:验证Access Token是否由可信的IdP签名。
2)检查权限:验证Access Token的scope
,确保应用程序具有访问所请求资源的权限。
3)检查过期时间:确保Access Token没有过期。
目标:如果Access Token有效,资源服务器将返回请求的数据给应用程序。