当前位置: 首页 > article >正文

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 TokenAccess Token

         请求内容:此请求包含授权码、客户端ID、客户端密钥(如果有)以及重定向URI(需要与初始请求的一致)。

         行为:IdP验证授权码和客户端信息后,返回ID TokenAccess Token

                  ID Token:包含关于用户身份的声明(claims),以JWT(JSON Web Token)的格式返回。

                  Access Token:用于访问受保护的资源,通常也是JWT。

4.验证 ID Token 并确认身份

         验证 ID Token 并确认身份:应用程序验证 ID Token → 确认用户身份

         步骤:应用程序接收到ID Token后,必须验证它的有效性。

         验证过程

  1. 签名验证:检查ID Token的签名是否是由IdP的私钥签署的,以确保其真实性。
  2. Audience验证:检查ID Token中的aud(受众)声明,确保它的值是应用程序的客户端ID。
  3. 过期时间验证:验证exp字段,确认Token没有过期。
  4. 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有效,资源服务器将返回请求的数据给应用程序。


http://www.kler.cn/news/321412.html

相关文章:

  • 详解机器学习经典模型(原理及应用)——GBDT
  • springboot实战学习(7)(JWT令牌的组成、JWT令牌的使用与验证)
  • 计算机毕业设计之:微信小程序的校园闲置物品交易平台(源码+文档+讲解)
  • 【ARM 嵌入式 编译系列 10.5 -- ARM toolchain naming convention】
  • 如何在CMakeList项目中集成GNU Autotools 构建模块
  • JavaSE——Arrays类、System类
  • 网格大师OSGB转OBJ,转换类型中的非拓扑、拓扑、重建有什么区别?
  • 【Docker】01-Docker常见指令
  • 【Linux实践】实验八:Shell程序的创建及变量
  • Scala第二天
  • 【C++笔试强训】如何成为算法糕手Day5
  • 解决TikTok无法注册或注册不了的问题
  • 手机使用技巧:如何修复变砖的 Android 手机
  • 策略模式
  • [笔记]某S厂减速箱部件参数表 - 技术问题海外联系方式
  • JavaScript typeof运算符
  • 实变函数精解【25】
  • Excel锁定单元格,使其不可再编辑
  • QT开发:详解 Qt 多线程编程核心类 QThread:基本概念与使用方法
  • 大语言模型量化方法GPTQ、GGUF、AWQ详细原理
  • 【算法】二叉树中的 DFS
  • 技术点:go使用gomail包进行邮件发送
  • Actions Speak Louder than Words Meta史诗级的端到端推荐大模型落地
  • element ui 精确控制日期控件 date-picker
  • 怎么备考2024年11月软考高级系统架构师 ?
  • 基于SSM+小程序的医院管理系统(医院1)(源码+sql脚本+视频导入教程+文档)
  • grpcurl使用
  • gitlab集成CI/CD,shell方式部署
  • EMC术语简要介绍
  • SSM的学习(3)