OAuth2、JWT

文章目录

    • OAuth2
    • JWT


OAuth2

  • 官网: https://oauth.net/2/

在 RFC 6749 中说明


1、资源所有者 resource owner, 如 github 用户
2、客户端/第三方应用 client, 如 支持github 登录的 csdn
3、资源服务器 resource server, 如
4、授权服务器 authorization server


授权所需信息

  • 应用名称
  • 应用网站
  • 重定向 URI 或回调 URL(redirect_uri)
  • 客户端标识 client_id
  • 客户端秘钥 client_secret

如 github 授权 app:

在这里插入图片描述


OAuth 授权方式
有以下四种

  1. 授权码模式 Authorization Code,功能最完整、流程最严密
  2. 简化模式 Implict Grant;省去了第三方应用的服务器;不建议,token 会暴露。为web浏览器设置。
  3. 密码模式 Resource Owner Password Credentials Grant,csdn 让用户输入 github 账号密码,再将密码给 github 请求;不建议。为遗留项目设计。
  4. 客户端模式 Client Credentials Grant。用客户端的秘钥获取 token,不需要用户参与。为后台API 服务消费者设计。

授权码模式 参数

  • response_type,必须,固定为 code,表示这是一个授权码请求;
  • client_id,必须,在授权服务器祖册应用后的到的唯一标识;
  • redirect_uri,可选,通过客户端注册的重定向 URI,一般要求和注册时一致;
  • scope,可选,请求资源范围,多个空格隔开;
  • state,可选(推荐),如果存在,原样返回给客户端。

JWT

  • 官网:https://jwt.io

JWT : JSON Web Token,通过数字签名的方式,以 json 对象为载体,在不同的服务终端之间安全的传输信息。


常见应用场景:授权认证
一旦用户登录后,后续每个请求都包含 JWT,系统在每次处理用户请求之前,都要进行 JWT 安全校验,通过之后再进行处理。


JWT 由三部分组成,用 . 拼接
三部分分别是:
1、 Header

{'typ': 'JWT', // token 类型'alg', 'HS256'  // 算法名称
}

2、Payload 载荷,存放有效信息
对这个数据进行 base64 加密

{'sub': '1234567', //  'name', 'john'  //  'admin', true  //  
}

3、Signature
加密后的 Header 和 Payload 用 . 拼接,让后将结果,用 header 中申明的算法再加盐加密一次。

var encodedstring = base64UrlEncoder(header) + '.' + base64UrlEncoder(payload);
var signature = HMACSHA256(encodedstring, 'secret')

参考

  • 魔王不造反:彻底理解 OAuth2 协议
    https://www.bilibili.com/video/BV1zt41127hX
  • 阮一峰:OAuth 2.0 的四种方式
    https://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html

伊织 2022-03-26

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入浅出MySQL-04-【常用函数】

前言 环境: Window11MySQL-8.0.35 1.字符串函数 最常用的一种函数。 注意:在 MySQL 中,字符串的下标(或称为索引)是从 1 开始的,而不是从 0 开始。 函数功能CONCAT(s1, s2, …, sn)连接s1, s2, …, s…

【高阶数据结构】B树 {B树的概念;B树的实现:节点设计,查找,插入,遍历,删除;B树的性能分析;B+树和B*树;B树的应用}

一、常见的搜索结构 以上结构适合用于数据量相对不是很大,能够一次性存放在内存中,进行数据查找的场景。如果数据量很大,比如有100G数据,无法一次放进内存中,那就只能放在磁盘上了,如果放在磁盘上&#xff…

如何查看连接的Linux服务器是ubuntu还是centos

测试环境 Ubuntu 22.04.4CentOS Linux release 7.9.2009 (Core) centos使用以下命令 cat /etc/centos-release结果 CentOS Linux release 7.9.2009 (Core)或者 cat /etc/issue结果 \S Kernel \r on an \mubuntu使用以下命令 cat /etc/issue结果 Ubuntu 22.04.4 LTS \n …

全局路线规划导读

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言一、全局路径探索的介绍二、基于定位的全局航线的录制方法扩展阅读可参考 三、曲线拟合的方法--Dubins曲线与Reeds-Shepp曲线…

Linux系统安全:从面临的攻击和风险到安全加固、安全维护策略(文末有福利)

1. Linux面临的攻击与风险 1.1. Linux系统架构 Linux系统架构解读: 用户之间隔离内核态与用户态之间隔离用户进程一般以低权限用户运行系统服务一般以特权服务运行用户态通过系统调用进入内核态内核对系统资源进行管理和分配 1.2. Linux系统常见安全威胁 1.2.1.…

Qt/C++音视频开发71-指定mjpeg/h264格式采集本地摄像头/存储文件到mp4/设备推流/采集推流

一、前言 用ffmpeg采集本地摄像头,如果不指定格式的话,默认小分辨率比如640x480使用rawvideo格式,大分辨率比如1280x720使用mjpeg格式,当然前提是这个摄像头设备要支持这些格式。目前市面上有一些厂家做的本地设备支持264格式&am…

目标检测——YOLOv7算法解读

论文:YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (2022.7.6) 作者:Chien-Yao Wang, Alexey Bochkovskiy, Hong-Yuan Mark Liao 链接:https://arxiv.org/abs/2207.02696 代码:h…

C++_第八周做题总结

id:45 A.Equation(类与对象构造) 题目描述 建立一个类Equation,表达方程ax2bxc0。类中至少包含以下方法: 无参构造(abc默认值为1.0、1.0、0)与有参构造函数,用于初始化a、b、c的值; set方法,…

哈希封装unordered系列关联式容器

文章目录 补档HashTable迭代器基本框架具体实现 HashTable模板化具体实现 UnorderedSet封装具体实现 UnorderMap封装 补档 上一次我们在使用哈希函数时说,利用仿函数可以解决不知道哈希表内存的数据类型时对哈希函数也可以进行计算,但是当时只给了一个框…

Android判断应用是否在前台运行

Android判断应用是否在前台运行 /*** Android判断应用是否在前台运行* 0:异常;1:前台;2:后台;3:未运行;*/private int isFrontShow(Context context) {if (context null) {ret…

基于STM32 的机场安检闸机排队系统

项目:基于STM32 的机场安检闸机排队系统 应用场景:现实中可能涉及到人数限额排队的情况下使用,例如安检(不能一次性通过太多人数:机场、高铁站、地铁等),电梯人数限额(一个电梯内限…

【Java那些年系列-启航篇 03】JDK、JRE和JVM之间是什么关系?

作者名称:纸飞机-暖阳 作者简介:专注于Java和大数据领域,致力于探索技术的边界,分享前沿的实践和洞见 文章专栏:Java那些年专栏 专栏介绍:本专栏涵盖了 Java SE从基础语法到面向对象编程,从异常…

VS2019中配置C++ OpenCV 4.5.4完整指南

⭐️我叫忆_恒心,一名喜欢书写博客的在读研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三…

STM32标准库ADC和DMA知识点总结

目录 前言 一、ADC模数转换器 (1)AD单通道 (2)AD多通道 二、DMA原理和应用 (1)DMA数据转运(内存到内存) (2)DMAAD多同道(外设到内存&#x…

堆排序(升)

堆排序(升) 堆排序是一种基于二叉堆数据结构的排序算法。它的主要想是将待排序的序列构建成一个大顶堆(或小顶),然后依次将堆顶元素与最后一个元素交换,并重新调整堆,使得剩余元素仍满足堆的性…

实习学习内容-Lua语法

Lua是一种轻量级的脚本语言,以其简单、灵活和高效的特点被广泛应用于嵌入式系统、游戏开发和服务器端编程中。Lua语言的设计目标是为了嵌入应用程序中,提供灵活的扩展和定制功能。下面,我将简要介绍Lua的基本语法和特点。 基本语法 变量和类…

24深圳杯数学建模挑战赛A题6页初步思路+参考论文+保姆级答疑!!!

问题1:单个残骸的精确位置定位 建立数学模型,分析如果要精准确定空中单个残骸发生音爆时的位置坐标(经度、纬度、高程)和时间,至少需要布置几台监测设备?假设某火箭一级残骸分离后,在落点附近布置了7台监测…

【热门话题】AI作画算法原理解析

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 AI作画算法原理解析AI作画算法概述基础原理:机器学习与深度学习卷积…

Bentley二次开发教程24-交互式类工具

交互式工具概念简述 本次内容主要涉及到交互式工具的使用,在MicroStation中,超过一半的功能都是以交互式工具的形式而存在的,因此交互式工具在MicroStation二次开发中便显得非常重要。当我们的鼠标或键盘在视图中产生交互操作时,…

黑马微服务课程2

课程地址:2024最新SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等)_哔哩哔哩_bilibili 课程名称:2024最新SpringCloud微服务开发与实战,java…