返回顶部
首页 > 资讯 > 服务器 >JWT和OAuth2.0
  • 658
分享到

JWT和OAuth2.0

服务器网络安全 2023-08-19 17:08:17 658人浏览 独家记忆
摘要

文章目录 前言一、JWT1、JWT格式2、签名和验签HS256RS256RSA的两点基本原理RSA公钥、私钥加密的使用场景 二、OAuth2.0三、应用场景 前言 Jwt和OAuth2.0没有可比性,是两

前言

Jwt和OAuth2.0没有可比性,是两个完全不同的东西。

JWT是一种认证协议,提供了一种用于发布接入令牌(Access Token),并对发布的签名接入令牌进行验证的方法。SSO私钥加密token。应用端公钥解密token,

OAuth2.0是一种授权框架,提供了一套详细的授权机制(指导)。用户或应用可以通过公开的或私有的设置,授权第三方应用访问特定资源。

一、JWT

1、JWT格式

一个JWT包含3个部分:

头部Header:可存放签名的类型

数据Payload:可存放用户数据和有效期,Payload的内容在接收者端是通过签名(Signature)来校验的。

签名Signature:使用密钥对Header和Payload数据进行加密生成签名。

JWT为了便于Http传输,3个部分需再进行Base64Url编码后用.进行关联,格式如下:

eyJhbGCioiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95ORM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

JWT真正的好处是让颁发JWT token的认证服务器和校验JWT token的应用服务器可以完全分开。

那签名是如何完成认证功能的呢,且看:

  1. 用户向认证服务器提交用户名和密码,认证服务器也可以和应用服务器部署在一起,但往往是独立的居多;
  2. 认证服务器校验用户名和密码组合,然后创建一个JWT token,token的Payload里面包含用户的身份信息,以及过期时间戳;
  3. 认证服务器使用密钥对Header和Payload进行签名,然后发送给客户浏览器;
  4. 浏览器获取到经过签名的JWT token,然后在之后的每个HTTP请求中附带着发送给应用服务器。经过签名的JWT就像一个临时的用户凭证,代替了用户名和密码组合,之后都是JWT token和应用服务器打交道了;
  5. 应用服务器检查JWT签名,确认Payload确实是由密钥拥有者签过名的;
  6. Payload身份信息代表了某个用户;
  7. 只有认证服务器拥有私钥,并且认证服务器只把token发给提供了正确密码的用户;
  8. 因此应用服务器可以认为这个token是由认证服务器颁发的也是安全的,因为该用户具有了正确的密码;
  9. 应用服务器继续完成HTTP请求,并认为这些请求确实属于这个用户;

2、签名和验签

对于JWT,签名方式有很多种,这里我们主要了解HS256和RS256。

HS256

HS256 使用同一个「secret_key」进行签名与验证(对称加密)。一旦 secret_key 泄漏,就毫无安全性可言了。

  • 如何使用哈希函数生成签名?

我们拿到Header、Payload外,还要加上一个密码,将这三个输入值一起哈希。输出结果是一个SHA-256 HMac或者基于哈希的MAC。如果需要重复生成,则需要同时拥有Header、Payload和密码才可以。这也意味着,哈希函数的输出结果是一个数字签名,因为输出结果就表示了Payload是由拥有密码的角色生成并加签了的,没有其它方式可以生成这样的输出值了。

  • 如何校验JWT签名?

当我们的服务接收到HS256签名的JWT时,我们需要使用同样的密码才能校验并确认token里面的Payload是否有效。为了验证签名,我们只需要将JWT Header和Payload以及密码通过哈希函数生成结果。JWT的接收者需要拿到和发送者一样的密码值。如果我们得到的哈希结果和JWT第三部分的签名值是一致的,则说明有效,可以确认发送者确实和接收者拥有相同的密码值。

  • 公式如下:

签名Signature=Header+Payload+一个密码 进行SHA-256哈希;再进行Base64Url编码(主要方便url上传输)。

验签: Header+Payload+一个密码 进行SHA-256哈希;和JWT的签名Signature对比。

RS256

RS256 是使用 RSA 私钥进行签名,使用 RSA 公钥进行验证。相比HS256更加安全。

使用RS256我们同样需要生成一个MAC,其目的仍然是创建一个数字签名来证明一个JWT的有效性。只是在这种签名方式中,我们将创建token和校验token的能力分开,只有认证服务器具备创建的能力,而应用服务器,具备校验的能力。

这样,我们需要创建两个密钥而不是一个:

仍然需要一个私钥,不过这次它只能被认证服务器拥有,只用来签名JWT。
私钥只能用来签名JWT,不能用来校验它。
第二个密钥叫做公钥(public key),是应用服务器使用来校验JWT。
公钥可以用来校验JWT,但不能用来给JWT签名。
公钥一般不需要严密保管,因为即便黑客拿到了,也无法使用它来伪造签名。

  • 公式如下:

签名Signature=Header+Payload 进行SHA-256哈希,再使用私钥对哈希值进行签名;再进行Base64Url编码(主要方便url上传输)。

验签: Header+Payload进行SHA-256哈希;使用公钥签名Signature进行解密,解密后的值和前面哈希值对比。

RSA的两点基本原理

  1. 私钥加密,持有私钥或公钥才可以解密
  2. 公钥加密,持有私钥才可解密

RSA公钥、私钥加密的使用场景

公钥和私钥都可以用于加解密操作,用公钥加密的数据只能由对应的私钥解密,反之亦然。虽说两者都可用于加密,但是不同场景使用不同的密钥来加密,规则如下:

私钥用于签名、公钥用于验签

签名和加密作用不同,签名并不是为了保密,而是为了保证这个签名是由特定的某个人签名的,而不是被其它人伪造的签名,所以私钥的私有性就适合用在签名用途上。

私钥签名后,只能由对应的公钥解密,公钥又是公开的(很多人可持有),所以这些人拿着公钥来解密,解密成功后就能判断出是持有私钥的人做的签名,验证了身份合法性。

公钥用于加密、私钥用于解密,这才能起到加密作用

因为公钥是公开的,很多人可以持有公钥。若用私钥加密,那所有持有公钥的人都可以进行解密,这是不安全的!

若用公钥加密,那只能由私钥解密,而私钥是私有不公开的,只能由特定的私钥持有人解密,保证的数据的安全性。

二、OAuth2.0

OAuth2 有4种授权模式, 其中的access code授权码模式在实现时可以使用JWT生成code, 也可以不用. 它们之间没有必然的联系;

  • 示例1:QQ音乐使用微信登录
    在这里插入图片描述

  • 示例2:口碑使用支付宝登录
    在这里插入图片描述

三、应用场景

  1. OAuth2用在使用第三方账号登录的情况(比如使用weibo, qq, GitHub登录某个app)
  2. JWT是用在前后端分离, 需要简单的对后台api进行保护时使用.(前后端分离无session, 频繁传用户密码不安全)

来源地址:https://blog.csdn.net/sssssooo/article/details/128509302

--结束END--

本文标题: JWT和OAuth2.0

本文链接: https://lsjlt.com/news/375676.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • JWT和OAuth2.0
    文章目录 前言一、JWT1、JWT格式2、签名和验签HS256RS256RSA的两点基本原理RSA公钥、私钥加密的使用场景 二、OAuth2.0三、应用场景 前言 JWT和OAuth2.0没有可比性,是两...
    99+
    2023-08-19
    服务器 网络 安全
  • OAuth2.0 social_djan
    python网站第三方登录,social-auth-app-django模块, social-auth-app-django模块是专门用于Django的第三方登录OAuth2协议模块 目前流行的第三方登录都采用了OAuth2协议   安装...
    99+
    2023-01-30
    social_djan
  • OAuth2.0介绍
    概述OAuth 2.0 授权框架能够是第三方应用获取应用被保护的服务资源,它是一种授权互联网标准,由IETF(Internet Engineering Task Force)管理发布。本文主要参考材料为 RFC 6749 初步理解接下来以一...
    99+
    2023-06-02
  • SAP和SAP C4C之间的OAuth2.0怎么配置
    这篇文章主要讲解了“SAP和SAP C4C之间的OAuth2.0怎么配置”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SAP和SAP C4C之间的OAuth2.0怎么配置”吧!基于OAuth...
    99+
    2023-06-04
  • [Vue]之Jwt的入门和Jwt工具类的使用及Jwt集成spa项目
    一,jwt入门 1.1 是什么?          JWT,全称为 JSON Web Token,是一种用于在网络应用之间传递信息的标准方法。它是基于 JSON 格式定义的一种简洁且自包含的方式,可以安全地在用户和服务之间传输声明信息 ...
    99+
    2023-10-24
    vue.js 前端 javascript 前端框架
  • jwt介绍和PHP的使用
    适用于分布式单点登录(SSO) 流程 客户端输入账号密码登录; 服务端判断登录信息,用户登录成功返回客户端token; 客户端存储token,每个请求都需要传递token到服务端; 服务端验证token的有效期,返回对应的信息; 构成 分为...
    99+
    2023-10-20
    1024程序员节 php
  • OAuth2.0的授权方式有哪些
    本篇内容介绍了“OAuth2.0的授权方式有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先我们需要清楚 OAuth 是什么?OAut...
    99+
    2023-07-05
  • Python JWT 介绍和使用详解
    1. JWT 介绍 ​jwt( JSON Web Tokens ),是一种开发的行业标准 RFC 7519 ,用于安全的表示双方之间的声明。目前,jwt广泛应用在系统的用户认证方面,特别是现在前后端分离项...
    99+
    2022-06-02
    Python JWT使用 Python JWT
  • Java - JWT的简单介绍和使用
    Java - JWT的简单介绍和使用 前言一. JWT 基础知识1.1 session 案例测试1.2 JWT 结构1.2.1 Header1.2.2 Payload1.2.3 Signatu...
    99+
    2023-10-27
    java 开发语言 spring boot
  • SpringBoot3.0 + SpringSecurity6.0+JWT
    JWT_SpringSecurity SpringBoot3.0 + SpringSecurity6.0+JWT Spring Security 是 Spring 家族中的一个安全管理框架。 一般We...
    99+
    2023-09-01
    java spring spring boot
  • Go语言如何使用golang-jwt/jwt/v4进行JWT鉴权详解
    目录前言1.什么是JWT2.JWT的数据结构2.1 Header2.2 Payload2.3 Signature2.4 Base64URL3使用JWT安装生成Token总结前言 最近...
    99+
    2024-04-02
  • phpcms V9实现qq登陆oauth2.0的方法
    phpcmsV9使用的QQ登陆依然是OAuth1.0,但现在腾讯已经不审核使用OAuth1.0的网站了。这对于使用pc的站长来讲是一个无比巨大的坑。经过对phpcms论坛的一位同学做的插件进行修改,现在完美实现QQ登陆,...
    99+
    2022-06-12
    phpcms qq登陆 oauth2.0
  • springboot整合springsecurity+oauth2.0密码授权模式
    springboot整合springsecurity+oauth2.0 本文采用的springboot去整合springsecurity,采用oauth2.0授权认证,使用jwt对token增强。本文仅为学习记录,如有不足多谢提出。 OAu...
    99+
    2023-08-18
    spring boot 服务器 java
  • JWT Token 在线解析和解码工具
    JWT (JSON Web Token) 是一种用于在网络应用间传递信息的开放标准。它由三部分组成:头部(header)、载荷(payload)和签名(signature)。头部包含了描述 JWT 的...
    99+
    2023-10-20
    前端 javascript 开发语言
  • Go语言的golang-jwt/jwt库怎么使用
    本文小编为大家详细介绍“Go语言的golang-jwt/jwt库怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go语言的golang-jwt/jwt库怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-07-04
  • 【SpringBoot整合JWT】
    目录 一、什么是JWT 二、JWT能做什么  三、为什么是JWT  1、基于传统的Session认证 2、基于JWT认证 四、JWT的结构是什么  五、JWT的第一个程序 六、封装JWT工具类  七、整合SpringBoot使用 一、什...
    99+
    2023-09-01
    spring boot 后端 java
  • php firebase/php-jwt
    camposer 安装JWT类 composer require firebase/php-jwt 2.在App文件下新建Services文件夹,新建JwtServicer类 3.类中写入以下代码 use Firebase\JWT\JWT;...
    99+
    2023-08-31
    php java 开发语言
  • golang实现jwt
    在当今的互联网应用开发中,安全性越来越受到重视。JSON Web Tokens(JWT)已成为大多数Web API设计中的常见身份验证和授权方案之一。JWT是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安...
    99+
    2023-05-22
  • phpcms V9实现QQ登陆OAuth2.0提供下载
    实现步骤: ①打开\phpcms\modules\member\index.php文件,把下面的代码找个地方塞进去(可以直接在pc默认的QQ登陆下面)。 复制代码代码如下://QQ登陆oAuth2.0 ublic fun...
    99+
    2022-06-12
    phpcms V9 QQ登陆
  • ASP.NET MVC中怎么使用Oauth2.0验证身份
    这期内容当中小编将会给大家带来有关ASP.NET MVC中怎么使用Oauth2.0验证身份,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. OAuth3.0中的角色  ● Resource Owner:...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作