首页 > 其他分享 >闲鱼面试:说说JWT工作原理?

闲鱼面试:说说JWT工作原理?

时间:2024-06-21 14:54:18浏览次数:12  
标签:包含 闲鱼 JWT 信息 面试 Token 签名 Payload

JWT(JSON Web Token)一种开放的标准规范(RFC 7519),用于在网络上安全的传输信息,通常被用于身份验证。

简单来说,你可以把 JWT 想象成一张小巧的、自包含的电子通行证。这张通行证里面包含了用户的身份信息,就像你在某个俱乐部的会员卡,上面有你的名字、会员等级等信息,拿着这张卡,你就能证明你是谁,享受相应的服务。

1.JWT组成

JWT 由三部分组成:头部(Header)、载荷(Payload)和签名(Signature),如下图所示:
image.png

  1. 头部(Header):包含了关于生成该 JWT 的信息以及所使用的算法类型。
  2. 载荷(Payload):包含了要传递的数据,例如身份信息和其他附属数据。JWT 官方规定了 7 个字段,可供使用:
    1. iss (Issuer):签发者。
    2. sub (Subject):主题。
    3. aud (Audience):接收者。
    4. exp (Expiration time):过期时间。
    5. nbf (Not Before):生效时间。
    6. iat (Issued At):签发时间。
    7. jti (JWT ID):编号。
  3. 签名(Signature):使用密钥对头部和载荷进行签名,以验证其完整性。

JWT 官网:https://jwt.io/

2.JWT工作原理

JWT 工作原理包含三部分:

  1. 生成 JWT
  2. 传输 JWT
  3. 验证 JWT

下面分别来看。

1.生成JWT

在用户登录时,当服务器端验证了用户名和密码的正确性后,会根据用户的信息,如用户 ID 和用户名称,加上服务器端存储的 JWT 秘钥一起来生成一个 JWT 字符串,也就是我们所说的 Token,这个 Token 是 Encoded 编码过的,类似于:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Decoded 解码后会得到三部分内容:头部(Header)+载荷(Payload)+签名(Signature)。

  1. 头部(Header):包含了关于生成该 JWT 的信息以及所使用的算法类型。
  2. 载荷(Payload):包含了要传递的数据,例如身份信息和其他附属数据。
  3. 签名(Signature):使用密钥对头部和载荷进行签名,以验证其完整性。

2.传输JWT

JWT 通常存储在客户端的 Cookie、LocalStorage、SessionStorage 等位置,客户端在每次请求时把 JWT 放在 Authorization 头中或作为参数传递给服务器端。

3.验证JWT

  1. 服务器端接收到 JWT 的 Token 后,会先将 Token Decoded 解码,之后会得到头部(Header)+载荷(Payload)+签名(Signature)。
  2. 然后服务器端会使用它本地存储的秘钥,以及头部(Header)中的加密算法和载荷(Payload)中的信息进行重新加密,得到一个新的签名。
  3. 最后会判断 Token 的真伪,用上一步新生成的签名和 Decoded 解码得到的签名(Signature)进行判断,如果二者一致,则说明当前的 Token 有效性的、完整的,可以执行后续的操作了,否则则返回 Token 错误。当然在这一步判断时,我们通常也要看载荷(Payload)中的过期时间是否有效,如果无效,则需要提示用户重新登录。

3.JWT优势

JWT 相较于传统的基于会话(Session)的认证机制,具有以下优势:

  1. 无需服务器存储状态:传统的基于会话的认证机制需要服务器在会话中存储用户的状态信息,包括用户的登录状态、权限等。而使用 JWT,服务器无需存储任何会话状态信息,所有的认证和授权信息都包含在 JWT 中,使得系统可以更容易地进行水平扩展。
  2. 跨域支持:由于 JWT 包含了完整的认证和授权信息,因此可以轻松地在多个域之间进行传递和使用,实现跨域授权。
  3. 适应微服务架构:在微服务架构中,很多服务是独立部署并且可以横向扩展的,这就需要保证认证和授权的无状态性。使用 JWT 可以满足这种需求,每次请求携带 JWT 即可实现认证和授权。
  4. 自包含:JWT 包含了认证和授权信息,以及其他自定义的声明,这些信息都被编码在 JWT 中,在服务端解码后使用。JWT 的自包含性减少了对服务端资源的依赖,并提供了统一的安全机制。
  5. 扩展性:JWT 可以被扩展和定制,可以按照需求添加自定义的声明和数据,灵活性更高。

使用 JWT 相较于传统的基于会话的认证机制,可以减少服务器存储开销和管理复杂性,实现跨域支持和水平扩展,并且更适应无状态和微服务架构。

课后思考

JWT如何实现自动续期?

本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:Redis、JVM、并发、并发、MySQL、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、设计模式、消息队列等模块。

标签:包含,闲鱼,JWT,信息,面试,Token,签名,Payload
From: https://www.cnblogs.com/vipstone/p/18260519

相关文章

  • 牛客网最强Java面试八股文(2024年6月持续更新)
    一、Java基础1.JDK和JRE有什么区别?JDK:JavaDevelopmentKit的简称,java开发工具包,提供了java的开发环境和运行环境。JRE:JavaRuntimeEnvironment的简称,java运行环境,为java的运行提供了所需环境。具体来说JDK其实包含了JRE,同时还包含了编译java源码的编译......
  • Java面试题及答案整理( 2024年 6 月最新版,持续更新)
    秋招金九银十快到了,发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全~这套互联网Java工程师面试题包括了:MyBatis、ZK、Dubbo、EL、Redis、MySQL、并发编程、Java面试、Spring、微服务、Linux、Springboot、SpringCloud、MQ、Kafka面试专......
  • 通过获取的jwt认证token,实现自动登录django-admin后台
    视图层fromrest_framework_simplejwt.tokensimportAccessTokenfromdjango.middleware.csrfimportget_tokenfromdjango.contrib.authimportloginclassJwtToSessionView(GenericViewSet):@action(methods=['GET'],detail=False)defset(self,......
  • 【2024最新精简版】网络_Linux操作系统面试篇
    文章目录简述tcp和udp的区别?get和post请求有哪些区别?常用HTTP请求方式有哪些?进程跟线程的区别?僵尸进程?IO的多路复用?虚拟内存什么是OSI模型说一说HTTP协议说一说HTTPS协议HTTPS协议和HTTP协议有什么区别?......
  • Android面试题:App性能优化之电量优化和网络优化
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点电量优化Doze模式系统的行为进入Doze后看看App有没有奔溃就可以Standby待机模式针对某个应用处于上述模式,App会无法访问网络解决方案可以手动申请权限让用......
  • session、cookies、tonken以及JWT的定义以及区别
    session概述Session用于记录用户的状态。Session指的是一段时间内,单个客户端与Web服务器的一连串相关的交互过程。在一个Session中,客户可能会多次请求访问同一个资源,也有可能请求访问各种不同的服务器资源。Session是由服务器端创建的原理Session会为每一次会话分配一个S......
  • 浅挖一下String类,解决String常见的面试题
    详解Java中的String类1.String是Java基本数据类型吗?许多同学在学习String类时,会误认为String类是基本数据类型,因为实实在在好像有点像C语言中的字符数组,字符,那不就是基本数据类型吗?可实际上不是的.在Java中String是个表示字符串的一个类,它是由字符组成的不可变......
  • 【全网最全最详细】JavaSE基础面试题(下)
    目录二十七、什么是BIO、NIO、AIO?二十八、SimpleDateFormat是线程安全的吗?二十九、如何解决SimpleDateFormat线程不安全的问题?三十、while(true)和for循环哪个性能好?三十一、Arrays.sort是使用什么排序算法实现的?三十二、String是如何实现不可变的?三十三、字符串常量......
  • 2024年 Java 面试八股文(20w字)
    第一章-Java基础篇1、你是怎样理解OOP面向对象   难度系数:⭐面向对象是利于语言对现实事物进行抽象。面向对象具有以下特征:继承:继承是从已有类得到继承信息创建新类的过程封装:封装是把数据和操作数据的方法绑定起来,对数据的访问只能通过已定义的接口多态性:多态性是指允......
  • Java面试八股文2024最新版
    一、java基础1、java有哪几种数据类型?基本数据类型:byte(1),char(2),short(2),int(4),long(8),double(8),float(4),boolean(1)引用数据类型:各种类和接口,枚举,数组2、 面向对象和面向过程的区别?面向对象和面向过程都是一种开发思想。面向过程就是根据解决问题所需要的步骤,具体化的一步一步的去实现......