OAuth2.0 知识点梳理

文章目录

  • OAuth2.0 知识点梳理
    • 一、四种角色
    • 二、四种模式的概述
    • 三、四种模式的图解

OAuth2.0 知识点梳理

一、四种角色

为了能够更好的理解本文中后续的内容,这里我先说下,OAuth2.0 中相关的四种角色,如下:

  1. 资源拥有者
  2. 资源服务
  3. 客户端
  4. 认证服务

以上四种角色到底都是干什么的呢?这里直接用个例子来说明下:

某SAAS平台要实现基于微信账号的登录(第三方登录),该平台(客户端)从微信认证服务(认证服务)得到某用户(资源拥有者)的授权从微信(资源服务)上获取该用户的信息(资源)​。

二、四种模式的概述

OAuth2.0 提供了四种授权(获取令牌)方式来应对不同的使用场景,如下:

  1. 授权码模式

    特点: 四种模式中最安全,也最复杂的一种模式。

    场景: 客户端通过认证服务得到用户授权继而调用资源服务,例如:客户端通过微信认证服务得到用户的授权继而访问到用户在微信中的个人信息。

  2. 密码模式

    特点: 用户的用户名和密码直接暴露给客户端。

    场景: 用户通过客户端提供的页面进行登录(输入用户名和密码),然后再由客户端调用认证服务进行认证授权。由于登录页面是客户端提供的,所以用户的用户名和密码将会暴露给客户端。安全起见,密码模式多见于自己开发的应用,例如:我司开发了某个应用对接了自己开发的认证服务和资源服务。

  3. 客户端模式

    特点: 针对客户端(例如:某系统、某APP…)层面进行授权,而非基于用户授权的场景,认证服务仅校验客户端的身份。

    场景: 客户端作为一个我方完全信任的存在,调用我方提供的资源服务,例如:某某平台要通过我方开发的OpenAPI获取我方的组织架构信息。

  4. 简化模式

    特点: 不需要与客户端应用的服务端进行交互,没有校验 client_secret。

    场景: 用于仅有前端页面,没有后端服务的客户端应用

基于以上四种模式是否与用户相关,为了便于理解,我又将这四个模式分为两大类:

  1. 用户认证(与用户相关): 授权模式,密码模式,简化模式。
  2. 客户端认证(与用户无关): 客户端模式。

三、四种模式的图解

首先我们要为客户端分配一对儿 client_id 和 client_secret,并指定该客户端可访问的资源(通过 scope,可以将 scope 作为资源的标签来理解)

  1. 客户端模式
    在这里插入图片描述
    A. 客户端的 authorized_grant_types 中必须包括 client_credentials,也就是客户端需要支持客户端模式。
    B. 客户端携带 client_id 和 client_secret 访问认证服务的 oauth/token 以此获得 access_token。
    C. 客户端携带 access_token 去资源服务那里访问有权访问的资源。

    获取 access_token 的请求:

    http://oauth.cab5.com/oauth/token?grant_type=client_credentials&client_id=CLIENT_ID&client_secret=CLIENT_SECRET&scope=SCOPE
    
    参数说明
    grant_type授权类型,固定值:client_credentials,表示当前获取access_token的请求为客户端模式
    client_id客户端标识
    client_secret客户端秘钥
    scope客户端权限
  2. 密码模式
    在这里插入图片描述
    A. 客户端的 authorized_grant_types 中必须包括 password,也就是客户端需要支持密码模式。
    B. 用户通过客户端提供的页面属于用户名和密码。
    C. 客户端携带用户输入的用户名和密码,以及client_id 和 client_secret 访问认证服务的 oauth/token 以此获得 access_token。
    D. 客户端携带 access_token 去资源服务那里获取用户信息。

    获取 access_token 的请求:

    http://oauth.cab5.com/oauth/token?grant_type=password&client_id=CLIENT_ID&client_secret=CLIENT_SECRET&username=USERNAME&password=PASSWORD&scope=SCOPE
    
    参数说明
    grant_type授权类型,固定值:password,表示当前获取access_token的请求为密码模式
    username用户名
    password用户密码
    client_id客户端标识
    client_secret客户端秘钥
    scope客户端权限
  3. 授权码模式
    在这里插入图片描述
    A. 客户端的 authorized_grant_types 中必须包括 authorization_code,也就是客户端需要支持授权码模式。
    B. 用户通过浏览器首次访问客户端,客户端判断当前用户需进行认证授权(即需要登录),则重定向到认证服务的认证授权页面。
    C. 用户在认证服务的认证授权页面上输入用户名和密码,并提交到认证服务进行验证,验证通过后,认证服务生成对应的授权码,然后携带该授权码重定向到客户端。
    D. 客户端拿到授权码后,携带授权码、client_id、client_secret 访问认证服务的 oauth/token 以此获得 access_token。
    E. 客户端携带 access_token 去资源服务那里获取用户信息。

    授权认证页面的请求:

    http://oauth.cab5.com/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=SCOPE
    
    参数说明
    response_type固定值:code,表示当前的请求为授权码模式
    client_id客户端标识
    redirect_uri授权码生成后会重定向到该地址上,并携带code(授权码)
    scope客户端权限

    获取 access_token 的请求:

    http://oauth.cab5.com/oauth/token?grant_type=authorization_code&code=CODE&client_id=CLIENT_ID&client_secret=CLIENT_SECRET&scope=SCOPE
    
    参数说明
    grant_type授权类型,固定值:authorization_code,表示当前获取access_token的请求为授权码模式
    code授权码,只能使用一次,使用完了(即获取过一次access_token了)即刻作废,需要重新申请
    client_id客户端标识
    client_secret客户端秘钥
    scope客户端权限
  4. 简化模式
    在这里插入图片描述
    A. 客户端的 authorized_grant_types 中必须包括 implicit,也就是客户端需要支持简化模式。
    B. 用户通过浏览器跳转到认证服务的认证授权页面。
    C. 用户在认证服务的认证授权页面上输入用户名和密码,并提交到认证服务进行验证,验证通过后,认证服务生成对应的 access_token,然后携带该 access_toekn 重定向到客户端,形如:https://xx.xxx.com/#access_token=ACCESS_TOKEN,这里的https://xx.xxx.com为REDIRECT_URI。

    授权认证页面的请求:

    http://oauth.cab5.com/oauth/authorize?response_type=token&client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=SCOPE
    
    参数说明
    response_type固定值:token,表示当前的请求为简化模式
    client_id客户端标识
    redirect_uriaccess_token 生成后会重定向到该地址上,并携带access_token
    scope客户端权限

    所谓简化模式其实就是对授权模式的简化,用户认证授权后直接生成 access_token,无需客户端再通过授权码换取access_token,整个过程无需提供 client_secret。

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

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

相关文章

内网实战1

1、信息收集: 使用nmap做端口扫描: nmap -sV -Pn -T4 192.168.26.174重要端口:80、445、139、135、3306 目录扫描: 访问80端口:发现一个网站是phpstudy搭建的; 发现一个mysql数据库,那我们…

[QT]设置程序仅打开一个,再打开就唤醒已打开程序的窗口

需求&#xff1a;speedcrunch 这个软件是开源的计算器软件。配合launch类软件使用时&#xff0c;忘记关闭就经常很多窗口&#xff0c;强迫症&#xff0c;从网上搜索对版本进行了修改。 #include "gui/mainwindow.h"#include <QCoreApplication> #include <…

CocosCreator3.8研究笔记(一)windows环境安装配置

一、安装Cocos 编辑器 &#xff08;1&#xff09;、下载Cocos Dashboard安装文件 Cocos 官方网站Cocos Dashboard下载地址 &#xff1a; https://www.cocos.com/creator-download9下载完成后会得到CocosDashboard-v2.0.1-win-082215.exe 安装文件&#xff0c;双击安装即可。 …

智能工厂移动式作业轻薄加固三防平板数据采集终端

在这个高度自动化和数字化的环境中&#xff0c;数据采集变得尤为重要。为了满足这个需求&#xff0c;工业三防平板数据采集终端应运而生。工业三防平板数据采集终端采用了轻量级高强度镁合金材质&#xff0c;这使得它在保持轻薄的同时具有更强的坚固性。这种材质还具有耐磨防损…

机器学习笔记之核函数再回首:Nadarya-Watson核回归python手写示例

机器学习笔记之核函数再回首——Nadaraya-Watson核回归手写示例 引言回顾&#xff1a; Nadaraya-Watson \text{Nadaraya-Watson} Nadaraya-Watson核回归通过核函数描述样本之间的关联关系使用 Softmax \text{Softmax} Softmax函数对权重进行划分将权重与相应标签执行加权运算 N…

自动化测试(三):接口自动化pytest测试框架

文章目录 1. 接口自动化的实现2. 知识要点及实践2.1 requests.post传递的参数本质2.2 pytest单元测试框架2.2.1 pytest框架简介2.2.2 pytest装饰器2.2.3 断言、allure测试报告2.2.4 接口关联、封装改进YAML动态传参&#xff08;热加载&#xff09; 2.3 pytest接口封装&#xff…

Android 绘制之文字测量

drawText() 绘制文字 绘制进度条:paint.strokeCap Paint.CAP.RONUD 线条两边样式 设置文字字体:paint.typeFace Resources.Compat.getFont(context,font) 设置加粗 paint.isFakeBoldText 设置居中: paint.setTextAlign Paint.Align.CENTER //居中, 并不是真正的居中 往…

农村农产品信息展示网站的设计与实现(论文+源码)_kaic

摘 要 随着软件技术的迅速发展,农产品信息展示的平台越来越多,传统的农产品显示方法将被计算机图形技术取代。这种网站技术主要把农产品的描述、农产品价格、农产品图片等内容&#xff0c;通过计算机网络的开发技术&#xff0c;在互联网上进行展示&#xff0c;然后通过计算机网…

Win11共享文件,能发现主机但无法访问,提示找不到网络路径

加密长度选择如下&#xff1a; 参考以下链接&#xff1a; Redirectinghttps://answers.microsoft.com/zh-hans/windows/forum/all/win11%E8%AE%BE%E7%BD%AE%E6%96%87%E4%BB%B6%E5%A4%B9/554343a9-d963-449a-aa59-ce1e6f7c8982?tabAllReplies#tabs

小研究 - Android 字节码动态分析分布式框架(五)

安卓平台是个多进程同时运行的系统&#xff0c;它还缺少合适的动态分析接口。因此&#xff0c;在安卓平台上进行全面的动态分析具有高难度和挑战性。已有的研究大多是针对一些安全问题的分析方法或者框架&#xff0c;无法为实现更加灵活、通用的动态分析工具的开发提供支持。此…

linux字符串处理

目录 1 C 截取字符串,截取两个子串中间的字符串2 获取该字符串后面的字符串用 strstr() 函数查找需要提取的特定字符串&#xff0c;然后通过指针运算获取该字符串后面的字符串用 strtok() 函数分割字符串&#xff0c;找到需要提取的特定字符串后&#xff0c;调用 strtok() 传入…

十四五双碳双控时代下的“低碳认证”

目录 前言 十四五双碳双控时代下的“低碳认证” 一、关于“低碳认证” 二、低碳认证优势 三、环境产品认证EPD 四、EPD相关运营机构 五、碳中和相关机构 六、EPD的认证流程 七、低碳产品认证认证流程和要求 八、相关机构认证证书样例 九、证书附件表 前言 通过本篇文…

DOCKER 部署 webman项目

# 设置基础镜像 FROM php:8.2-fpm# 安装必要的软件包和依赖项 RUN apt-get update && apt-get install -y \nginx \libzip-dev \libpng-dev \libjpeg-dev \libfreetype6-dev \&& rm -rf /var/lib/apt/lists/*# 安装 PHP 扩展 RUN docker-php-ext-configure gd …

探讨C#、C++和Java这三门语言在嵌入式的地位

我理解对于初入嵌入式领域的担忧。你是想选择一款通用性最广的语言专心学习&#xff0c;但是不知如何选择&#xff0c;视频后方提供了免费的嵌入式学习资源&#xff0c;内容涵盖入门到进阶&#xff0c;需要的到后方免费获取。因为我也曾是一名计算机专业毕业生。通过一段时间的…

无涯教程-Python机器学习 - Analysis of Silhouette Score函数

剪影得分的范围是[-1,1]。其分析如下- 1分数-接近1 剪影分数表示样本距离其邻近簇很远。 0分数-0 剪影分数表示样本在将两个相邻聚类分隔开的决策边界上或非常接近。 -1分数-1 剪影分数表示样本已分配给错误的聚类。 Silhouette得分的计算可以使用以下公式完成 $$剪影得…

计算机竞赛 基于大数据的股票量化分析与股价预测系统

文章目录 0 前言1 课题背景2 实现效果3 设计原理QTChartsarma模型预测K-means聚类算法算法实现关键问题说明 4 部分核心代码5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于大数据的股票量化分析与股价预测系统 该项目较为新颖…

执行jmeter端口不够用报错(Address not available)

执行jmeter端口不够用报错(Address not available) linux解决方案 // 增加本地端口范围 echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range// 启用快速回收TIME_WAIT套接字 sudo sysctl -w net.ipv4.tcp_tw_recycle1// 启用套接字的重用 sudo sysctl -w net.ipv4.t…

LLM-Rec:基于提示大语言模型的个性化推荐

1. 基本信息 论文题目:LLM-Rec: Personalized Recommendation via Prompting Large Language Models 作者:Hanjia Lyu, Song Jiang, Hanqing Zeng, Yinglong Xia, Jiebo Luo 机构:University of Rochester, University of California Los Angeles, Meta AI, University of Ro…

STM32f103入门(4)对射式红外传感器计次(外部中断)

中断:在主程序运行过程中&#xff0c;出现了特定的中断触发条件 (中断源)&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序处理完成后又返回原来被暂停的位置继续运行中断优先级:当有多个中断源同时申请中断时&#xff0c;CPU会根据中断源的轻重缓急进…

Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动后又停止了解决方案

在启动oracle的服务OracleOraDb11g_home1TNSListener时&#xff0c;提示服务启动后又停止了。 解决方法&#xff1a; 修改oracle安装目录下的两个配置文件&#xff1a; 以上两个文件&#xff0c;对应的HOST的值&#xff0c;都改为127.0.0.1 然后再启动服务&#xff0c;启动成…