UCAS 24秋网络认证技术 CH16 OAuth OIDC复习

单点登录、OAuth、OIDC原理过程区别

文章目录

  • 单点登录、OAuth、OIDC原理过程区别
    • 单点登录概念
      • 优点
    • 什么是 OAuth?
      • 概述
      • OAuth 2.0 中的角色
      • 客户端类型
      • 客户端注册
      • 抽象协议流程
        • 协议流程图
      • Authorization Grant (授权许可)
      • Access Token (访问令牌)
      • Refresh Token (刷新令牌)
    • OpenID
      • 概述
      • OpenID Connect (OIDC)
      • OIDC 中的角色
      • OpenID Connect协议有三种类型
      • Authorization Code Flow (授权码模式) 流程
        • 1. 准备授权请求(Prepare Authorization Request)
        • 2. 授权请求(Authorization Request)
        • 3. 验证用户身份(Authenticate End User)
        • 4. 用户授权(Consent/Authorization)
        • 5. 重定向返回授权码(Redirect with Authorization Code)
        • 6. 接收授权码(Receive Authorization Code)
        • 7. 令牌请求(Token Request)
        • 8. 返回 Access Token 和 ID Token
        • 9. 验证 ID Token(Validate ID Token and Get End User Subject Identifier)
        • 10. 可选的 Access Token 使用(Optional Access Token Usage)
        • 11. 可选的 UserInfo 响应(Optional UserInfo Response)
      • 关键技术要求
    • Implicit Flow(隐式模式)流程
      • 流程步骤
        • **1. 依赖方准备授权请求**
        • **2. 终端用户发送授权请求**
        • **3. 授权服务器鉴别终端用户**
        • **4. 终端用户同意授权**
        • **5. 授权服务器重定向回依赖方**
        • **6. 依赖方接收 ID 令牌和访问令牌**
        • **7. 依赖方验证 ID 令牌**
        • **8. (可选)依赖方使用访问令牌访问受保护资源**
        • **9. (可选)UserInfo Response**
          • 请求:
          • 响应:
        • **完整流程总结**
        • 关键特点
      • 隐式模式的主要安全挑战

单点登录概念

一次用户的身份鉴别动作(唯一的身份注册)

  • 登录多个系统
    • 不需要反复多次的输入password
    • 可能包含了多次的“系统自动化动作”

优点

  • 简化用户操作
  • 简化管理
    • 集中式的、统一安全策略
    • 重置口令的请求,大量减少

什么是 OAuth?

概述

  • OAuth 2.0 是一个授权框架:
    • 允许第三方应用获得对网络服务有限访问权限
    • 第三方应用可以:
      • 代表资源所有者,通过协调资源所有者与 HTTP 服务之间的批准交互来获得访问权限;
      • 或者以自己的名义获得访问权限。
    • 无需暴露用户的凭据

OAuth 2.0 中的角色

image.png

  1. 资源所有者 (Resource Owner)
    • 能够授予对受保护资源访问权限的实体。
    • 当资源所有者是人时,称为终端用户 (end-user)
  2. 资源服务器 (Resource Server)
    • 托管受保护资源的服务器,能够使用访问令牌接收和响应对受保护资源的请求。
  3. 客户端 (Client)
    • 一个应用程序,代表资源所有者并在其授权下发起受保护资源请求。
  4. 授权服务器 (Authorization Server)
    • 在成功验证资源所有者并获得授权后,向客户端颁发访问令牌的服务器。

客户端类型

  • Web 应用程序是一个运行在网络服务器上的机密客户端。

    • 客户端凭据以及颁发给客户端的任何访问令牌都存储在网络服务器上,且不会暴露给资源所有者或被其访问
      image.png
  • 基于用户代理的应用程序是一个公共客户端,客户端代码从网络服务器下载,并在资源所有者使用的设备上的用户代理(例如,网络浏览器)中执行。

    • 例如,在浏览器中运行的 JavaScript 应用程序
      image.png
  • 本地应用程序是安装在资源所有者所使用设备上的公共客户端,并在该设备上执行。

    • 协议数据和凭据对资源所有者是可访问的。
    • 例如,安装在用户计算机或设备(如手机、平板电脑)上的应用程序。

客户端注册

  • 在启动协议之前,客户端需要向授权服务器注册。
  • 客户端开发者需要:
    • 指定客户端类型。
    • 提供客户端的重定向 URI。
  • 授权服务器:
    • 向注册的客户端分配一个客户端标识符
    • 为机密客户端建立认证方法,通常颁发一套客户端凭据(如密码、公钥/私钥对)。
    • 可以为公共客户端建立认证方法。
  • 客户端注册的方法不在 RFC6749 的范围内。
    image.png

抽象协议流程

协议流程图
  • (A) Authorization Request(授权请求) -> 资源所有者 (Resource Owner)
  • (B) Authorization Grant(授权许可) <- 资源所有者
  • © Authorization Grant(授权许可) -> 授权服务器 (Authorization Server)
  • (D) Access Token(访问令牌) <- 授权服务器
  • (E) Access Token(访问令牌) -> 资源服务器 (Resource Server)
  • (F) Protected Resource(受保护资源) <- 资源服务器

Authorization Grant (授权许可)

image.png

  • 定义:
    • 表示资源所有者授权的凭据,客户端通过授权许可获取访问令牌 (Access Token)。
  • 授权许可类型:
    1. Authorization Code (授权码)
      • 授权码通过授权服务器获取。
    2. Implicit (隐式授权)
      • 一种简化的授权码流程,适用于在浏览器中实现的客户端(例如 JavaScript)。
      • 客户端直接被颁发访问令牌。
    3. Resource Owner Password Credentials (资源所有者密码凭据)
      • 资源所有者的用户名和密码直接作为授权许可使用。
      • 仅在资源所有者与客户端之间有高度信任时使用。
    4. Client Credentials (客户端凭据)
      • 客户端凭据可用作授权许可。
      • 通常用于客户端以自己的名义(即客户端也是资源所有者)操作的场景。
  • 注意: 不同类型的授权许可对应不同的授权协议流程,主要考察前两种

Access Token (访问令牌)

image.png

  • 定义:
    • 用于访问受保护资源的凭据。
    • 是分配给客户端的授权的字符串表示。
  • 特点:
    • 访问令牌提供抽象层,用单一令牌替换了不同的授权机制(例如用户名和密码)。
    • 访问令牌可以有不同的格式、结构和使用方法。
    • RFC6749 没有对访问令牌进行定义,其用法在 RFC6750 中规定。

Refresh Token (刷新令牌)

image.png

  • 定义:
    • 刷新令牌是一种用于获取访问令牌的凭据。
    • 由授权服务器颁发给客户端,用于在当前访问令牌失效或过期时获取新的访问令牌。
    • 仅供授权服务器使用。

OpenID

概述

  • OpenID 是一个开放标准和去中心化的认证协议。
  • OpenID 允许用户使用已有账户登录多个网站,而无需创建新的密码。

OpenID Connect (OIDC)

  • OpenID Connect 1.0 是基于 OAuth 2.0 协议之上的一个简单身份层。
  • 它使客户端能够基于由授权服务器执行的认证,验证终端用户的身份。
  • OpenID Connect 将认证作为 OAuth 2.0 授权过程的扩展来实现:
    • 在授权请求中包含 openid 范围值。
    • 认证信息以 ID Token 的形式返回。

OIDC 中的角色

  1. OpenID Providers (OPs):
    • 支持 OAuth 2.0 的授权服务器,能够对终端用户进行认证,并向依赖方 (Relying Party) 提供与认证事件和终端用户相关的声明 (Claims)。
  2. Relying Parties (RPs):
    • 支持 OAuth 2.0 的客户端应用,要求从 OpenID 提供方获取终端用户的认证和声明信息。
      image.png

OpenID Connect协议有三种类型

  • 授权码鉴别
  • 隐式鉴别
  • 混合鉴别
  • 三种协议流程的区别就是依赖方获得令牌的方式不同
  1. Authorization Code Flow (授权码模式)
    • 特点:最安全,适合服务器端应用。
    • 流程:通过授权码换取 ID Token 和 Access Token。
    • 推荐场景:后台服务器和安全敏感场景。
  2. Implicit Flow (隐式模式)
    • 特点:直接返回 ID Token 和 Access Token,省略授权码交换步骤。
    • 缺点:安全性较低。
    • 推荐场景:客户端浏览器直接与 IdP 通信。
  3. Hybrid Flow (混合模式)
    • 特点:结合了授权码和隐式模式,允许部分令牌直接返回,同时获取授权码用于进一步交换。
    • 推荐场景:需要更快响应时间的场景。
      image.png

image.png

Authorization Code Flow (授权码模式) 流程

1. 准备授权请求(Prepare Authorization Request)
  • Relying Party (RP) 构造一个授权请求,包含 client_idredirect_uriscope 等参数。
  • 该请求通过用户代理(如浏览器)传递到 Authorization Server
2. 授权请求(Authorization Request)
  • 用户在 Authorization Server 上看到授权页面,登录并确认授权请求。
3. 验证用户身份(Authenticate End User)
  • Authorization Server 验证终端用户的身份,例如通过用户名和密码或多因子验证。
4. 用户授权(Consent/Authorization)
  • 用户同意授权请求(授权范围可能包括访问用户的电子邮件、姓名等)。
5. 重定向返回授权码(Redirect with Authorization Code)
  • 用户授权后,Authorization Server 将用户重定向到 RP 提供的 redirect_uri,并在 URI 参数中附带授权码(Authorization Code)。
6. 接收授权码(Receive Authorization Code)
  • RP 接收从 Authorization Server 返回的授权码,用于后续请求令牌。
7. 令牌请求(Token Request)
  • RP 使用授权码向 Token Endpoint 发起请求。
  • 请求参数包括:
    • grant_type(设置为 authorization_code)。
    • code(授权码)。
    • redirect_uri(需与初始授权请求中一致)。
    • client_idclient_secret(用于 RP 身份验证)。
8. 返回 Access Token 和 ID Token
  • Token Endpoint 验证授权码的有效性,并向 RP 返回以下令牌:
    • Access Token: 用于访问用户受保护资源(如 UserInfo 端点)。
    • ID Token: 用于验证终端用户身份。
9. 验证 ID Token(Validate ID Token and Get End User Subject Identifier)
  • RP 验证 ID Token 的签名和声明字段:
    • 验证 iss(发布方)是否匹配授权服务器。
    • 验证 aud(受众)是否包含 RP 的 client_id
    • 验证 exp(过期时间)确保令牌未过期。
    • 验证 nonce(防重放攻击)。
10. 可选的 Access Token 使用(Optional Access Token Usage)
  • RP 使用 Access Token 请求 UserInfo Endpoint 获取用户的详细信息。
11. 可选的 UserInfo 响应(Optional UserInfo Response)
  • UserInfo Endpoint 返回用户信息,如姓名、电子邮件等。

关键技术要求

  1. ID Token 的签名与加密
    • ID Tokens 必须使用 JWS(JSON Web Signature)进行签名。
    • ID Token 可以同时签名和加密(使用 JWS 和 JWE)。
    • 如果 ID Token 被加密,则必须先签名后加密。
  2. 安全通信
    • Authorization Server 的通信必须使用 TLS 加密。
    • Token Endpoint 的通信必须使用 TLS 加密,确保传输的授权码和令牌安全。

image.png

Implicit Flow(隐式模式)流程

流程步骤

1. 依赖方准备授权请求

依赖方(Relying Party,RP)准备一个授权请求,构造包含以下参数的 URL:

  • response_type:设置为 id_tokenid_token token,表明隐式流程。
  • client_id:依赖方的标识符。
  • redirect_uri:授权完成后,授权服务器重定向的地址。
  • scope:包含 openid 和其他所需权限(如 profileemail)。
  • state:随机字符串,用于防止 CSRF 攻击。
  • (可选)nonce:随机字符串,用于防止重放攻击。

构造后的授权请求 URL 形如:

https://authorization-server.com/authorize?
response_type=id_token+token
&client_id=123456
&redirect_uri=https://client.example.org/cb
&scope=openid+profile+email
&state=xyz
&nonce=abc

2. 终端用户发送授权请求

用户通过浏览器向授权服务器发送授权请求,该请求通常被依赖方嵌入到重定向页面中。


3. 授权服务器鉴别终端用户

授权服务器对终端用户进行身份验证,常见的方式包括:

  • 用户名和密码。
  • 二维码扫描。
  • 其他双因素认证方式。

如果用户已登录,则可以跳过身份验证步骤。


4. 终端用户同意授权

授权服务器向用户展示一个授权界面,明确显示依赖方请求的权限范围(Scope)。用户可以选择授权或拒绝授权。


5. 授权服务器重定向回依赖方

用户同意授权后,授权服务器将用户重定向到依赖方的 redirect_uri,并在 URL 的哈希部分包含令牌信息。例如:

https://client.example.org/cb#
id_token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
&access_token=SlAV32hkKG
&token_type=Bearer
&expires_in=3600
&state=xyz

如果用户拒绝授权,返回的 URL 会包含错误信息:

https://client.example.org/cb#
error=access_denied
&state=xyz

6. 依赖方接收 ID 令牌和访问令牌

依赖方从 URL 的哈希部分提取令牌:

  • ID Token:用来验证终端用户的身份。
  • Access Token:用于后续访问受保护资源。

7. 依赖方验证 ID 令牌

依赖方验证 ID 令牌的真实性,包括:

  1. 检查签名(验证其由授权服务器签发)。
  2. 检查 iss(颁发者标识符)、aud(接收方标识符,通常为依赖方的 client_id)是否匹配。
  3. 验证 exp(过期时间)和 iat(签发时间)。
  4. 验证 nonce,以确保令牌未被重放。

8. (可选)依赖方使用访问令牌访问受保护资源

依赖方可以使用 Access Token 向授权服务器的 UserInfo Endpoint 请求终端用户的详细信息(例如姓名、邮箱地址等)。


9. (可选)UserInfo Response

如果依赖方发起了 UserInfo 请求,授权服务器返回关于用户的声明(Claims),内容取决于 Scope 和 Claims 的定义。例如:

请求:
GET /userinfo HTTP/1.1
Host: server.example.com
Authorization: Bearer SlAV32hkKG
响应:
{
  "sub": "248289761001",
  "name": "Jane Doe",
  "given_name": "Jane",
  "family_name": "Doe",
  "email": "janedoe@example.com",
  "picture": "http://example.com/janedoe/me.jpg"
}

依赖方根据业务需求使用这些用户信息进行后续操作。

完整流程总结
  1. 依赖方准备授权请求:构造请求并重定向用户到授权服务器。
  2. 终端用户发送授权请求:通过浏览器将请求发送到授权服务器。
  3. 授权服务器鉴别终端用户:验证用户身份。
  4. 终端用户同意授权:用户授权依赖方访问其信息。
  5. 授权服务器重定向回依赖方:返回 ID Token 和 Access Token。
  6. 依赖方接收令牌:提取并处理返回的令牌。
  7. 依赖方验证 ID 令牌:确保 ID Token 的合法性和安全性。
  8. (可选)依赖方使用访问令牌访问资源:请求受保护的用户信息。
  9. (可选) UserInfo Response:授权服务器返回用户的详细信息。
关键特点
  1. 直接返回 Token
    • Authorization Code Flow(授权码模式) 不同,Implicit Flow 会直接返回 ID Token 和(或) Access Token,而不需要通过授权码换取。
  2. 省略服务器端交互
    • 令牌直接通过浏览器传递给客户端,无需 RP 和授权服务器之间的服务器端通信。
  3. 适用场景
    • 适合客户端直接与授权服务器交互的场景(如单页面应用 SPA 或浏览器应用)。
    • 不适用于高安全性要求的场景。

隐式模式的主要安全挑战

  1. 令牌泄露
    • 由于 Token 通过浏览器传递,可能被拦截。
    • 必须使用 TLS 加密通信。
  2. Replay Attack(重放攻击)
    • 通过 nonce 值和短时效的 Token 减少重放攻击的风险。
  3. Token 放置问题
    • 浏览器地址栏可能会暴露 Token,建议使用 fragment 部分避免 Token 被记录到服务器日志。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/947021.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PDF预览插件

PDF预览插件 可用于当前页面弹窗形式查看,可增加一些自定义功能 pdf预览插件 代码块: pdfobject.js <div class="pdfwrap"><div class="item"><h3>笑场</h3><div class="tags"><p>李诞</p><i&…

Echarts+vue电商平台数据可视化——webSocket改造项目

websocket的基本使用&#xff0c;用于测试前端能否正常获取到后台数据 后台代码编写&#xff1a; const path require("path"); const fileUtils require("../utils/file_utils"); const WebSocket require("ws"); // 创建WebSocket服务端的…

Transformer从零详细解读——DASOU讲AI

1. 从全局角度概括Transformer transformer的任务是什么&#xff1f; 进一步细化 进一步细化&#xff0c;注意&#xff1a;每个encoder结构相同&#xff0c;参数不同&#xff1b;decoder同理 原论文中的图如下&#xff1a; 2.Encoder 2.1 输入部分 &#xff08;1&#xff09…

696: Soldiers

曼哈顿距离&#xff08;Manhattan Distance&#xff09; 在二维空间中&#xff0c;两个点 (x1, y1) 和 (x2, y2) 的 曼哈顿距离 是&#xff1a; |x1 - x2| |y1 - y2| 曼哈顿距离描述了在网格上行走的距离&#xff0c;限制只能水平或垂直移动。 #include <iostream>…

自学记录鸿蒙API 13:实现多目标识别Object Detection

起步&#xff1a;什么叫多目标识别&#xff1f; 无论是生活中的动物识别、智能相册中的场景分类&#xff0c;还是工业领域的检测任务&#xff0c;都能看到多目标识别的身影。这次&#xff0c;我决定通过学习HarmonyOS最新的Object Detection API&#xff08;API 13&#xff09…

【Cesium】九、Cesium点击地图获取点击位置的坐标,并在地图上添加图标

文章目录 一、前言二、实现方法三、App.vue 一、前言 查找发现好几种方法可以获取到点击位置的坐标。这里我实现需求就不深究学习了。将几位大佬的方法学习过来稍微整合了一下。 本文参考文章&#xff1a; cesium 4种拾取坐标的方法 【Cesium基础学习】拾取坐标 cesium拾取当…

ts总结一下

ts基础应用 /*** 泛型工具类型*/ interface IProps {id: string;title: string;children: number[]; } type omita Omit<IProps, id | title>; const omitaA: omita {children: [1] }; type picka Pick<IProps, id | title>; const pickaA: picka {id: ,title…

人脑处理信息的速度与效率:超越计算机的直观判断能力

人脑处理信息的速度与效率&#xff1a;超越计算机的直观判断能力 关键词&#xff1a; #人脑信息处理 Human Brain Information Processing #并行处理 Parallel Processing #视觉信息分析 Visual Information Analysis #决策速度 Decision Speed #计算机与人脑比较 Computer v…

CentOS — 目录管理

文章目录 一、目录结构二、切换目录三、查看目录四、创建目录五、复制目录六、剪切目录七、删除目录 目录也是一种文件。 蓝色目录&#xff0c;绿色可执行文件&#xff0c;红色压缩文件&#xff0c;浅蓝色链接文件&#xff0c;灰色其它文件&#xff0c; 点开头的是隐藏文件&…

cursor设备ID修改器,你可以无限试用cursor了!

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…

springboot523基于Spring Boot的大学校园生活信息平台的设计与实现(论文+源码)_kaic

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本大学校园生活信息平台就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据…

RabbitMQ中的异步Confirm模式:提升消息可靠性的利器

在现代分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;扮演着至关重要的角色&#xff0c;它能够解耦系统组件、提高系统的可扩展性和可靠性。RabbitMQ作为一款广泛使用的消息队列中间件&#xff0c;提供了多种机制来确保消息的可靠传递。其中&#xff…

集线器,交换机,路由器,mac地址和ip地址知识记录总结

一篇很不错的视频简介 基本功能 从使用方面来说&#xff0c;都是为了网络传输的标识&#xff0c;和机器确定访问对象 集线器、交换机和路由器 常听到路由器和集线器&#xff0c;下面是区别&#xff1a; 集线器 集线器&#xff1a;一个简单的物理扩展接口数量的物理硬件。…

什么是 GPT?Transformer 工作原理的动画展示

大家读完觉得有意义记得关注和点赞&#xff01;&#xff01;&#xff01; 目录 1 图解 “Generative Pre-trained Transformer”&#xff08;GPT&#xff09; 1.1 Generative&#xff1a;生成式 1.1.1 可视化 1.1.2 生成式 vs. 判别式&#xff08;译注&#xff09; 1.2 Pr…

u3d中JSON数据处理

一.认识JSON 1.1 Json概述 JSON&#xff08;JavaScript Object Notation&#xff0c;JavaScript对象表示法&#xff09;JSON和XML是比较类似的技术&#xff0c;都是用来存储文本信息数据的&#xff1b;相对而言&#xff0c;JSON比XML体积更小巧&#xff0c;但是易读性不如XML…

Android 模拟器系统镜像选择指南

Android 模拟器系统镜像选择指南 在选择 Android 模拟器的系统镜像时&#xff0c;根据实际需求选择合适的版本。以下是具体建议&#xff1a; 1. 目标 API Level 如果需要适配最新版本的 Android&#xff1a; 选择&#xff1a;API 35 (Android 14)&#xff08;代号&#xff1…

网络分析工具-tcpdump

文章目录 前言一、tcpdump基础官网链接命令选项详解常规过滤规则tcpdump输出 一、tcpdump实践HTTP协议ICMP状态抓包 前言 当遇到网络疑难问题的时候&#xff0c;抓包是最基本的技能&#xff0c;通过抓包才能看到网络底层的问题 一、tcpdump基础 tcpdump是一个常用的网络分析工…

打造三甲医院人工智能矩阵新引擎(一):文本大模型篇--基于GPT-4o的探索

一、引言 当今时代&#xff0c;人工智能技术正以前所未有的速度蓬勃发展&#xff0c;深刻且广泛地渗透至各个领域&#xff0c;医疗行业更是这场变革的前沿阵地。在人口老龄化加剧、慢性疾病患病率上升以及人们对健康需求日益增长的大背景下&#xff0c;三甲医院作为医疗体系的核…

mysql连接时报错1130-Host ‘hostname‘ is not allowed to connect to this MySQL server

不在mysql服务器上通过ip连接服务提示1130错误怎么回事呢。这个错误是因为在数据库服务器中的mysql数据库中的user的表中没有权限。 解决方案 查询mysql库的user表指定账户的连接方式 SELECT user, host FROM mysql.user;修改指定账户的host连接方式 update mysql.user se…

linux下安装达梦数据库v8详解

目录 操作系统、数据库 1、下载达梦数据库 2、安装前准备 2.1、建立数据库用户和组 2.2、修改文件打开最大数 2.3、挂载镜像 2.4、新建安装目录 3、数据库安装 4、配置环境变量 5、初始化数据库实例 6、注册服务 7、使用数据库 8、卸载数据库 9、多实例管理 10、…