码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JWT单点登录


    目录

    一:什么是JWT

     二:JWT实现用户认证流程图

    三:为什么要使用JWT

    四:Java过程中的实际开发应用

    五:jwt延时失效怎么解决的

    一:什么是JWT

    通俗地说,JWT的本质就是一个字符串,它是将用户信息保存到一个Json字符串中,然后进行编码后得到一个JWT token,并且这个JWT token带有签名信息,接收后可以校验是否被篡改,所以可以用于在各方之间安全地将信息作为Json对象传输

    当然使用Session可以实现这个功能,但是使用Session的同时也会增加服务器的存储压力,而JWT是将存储的压力分布到各个客户端机器上,从而减轻服务器的压力。

    JWT由3个子字符串组成,分别为Header,Payload以及Signature,结合JWT的格式即:Header.Payload.Signature。

    (Claim是描述Json的信息的一个Json,将Claim转码之后生成Payload)。

     

     

     二:JWT实现用户认证流程图

    这里写图片描述 

     

    三:为什么要使用JWT

    我们知道HTTP协议本身是无状态的,如果用户向我们的应用提供了用户名和密码来进行用户认证,认证通过后的http协议不会记录下认证后的状态,那么下一次请求时,还需要重新进行用户认证,因为根据HTTP协议,我们并不知道是哪个用户发出的请求,所以为了让我们的应用能识别是哪个用户发出的请求,我们只能在用户首次登录成功后,在服务器存储一份用户登录的信息,这份登录信息会在响应时传递给浏览器,告诉其保存为cookie,以便下次请求时发送给我们的应用,这样我们的应用就能识别请求来自哪个用户了,这是传统的基于session认证的过程

    然而,传统的session认证有如下的问题:

    • 每个用户的登录信息都会保存到服务器的session中,随着用户的增多,服务器开销会明显增大
    • 对于非游览器的客户端,手机移动端等不适用,因为session依赖cookie,而移动端没有cookie
    • 因为session认证本质基于cookie,所以如果cookie被截获,用户很容易收到跨站请求伪造攻击。并且如果浏览器禁用了cookie,这种方式也会失效
    • 由于基于Cookie,而cookie无法跨域,所以session的认证也无法跨域,对单点登录不适用

    四:Java过程中的实际开发应用

    1.在登录验证通过后,给用户生成一个随机的token(这个不是jwt,可以用uuid等算法生成),然后将这个token作为key的一部分,用户信息作为value 存入redis中,并设置过期时间,这个过期时间就是jwt失效时间

    2.将第一步中随机生成的token作为JWT的payLoad生成JWT字符串返回给前端

    3.前端之后每次请求都在请求头中的Authorization字段中携带JWT字符串

    4.后端定义一个拦截器,每次收到前端请求时,都先从请求头中的Authorization字段中取出JWT字符串并进行验证,验证通过后解析出payload中的随机token,然后再用这个随机token得到key,从Redis中获取用户信息,如果能获取到就说明用户已经登录

    五:jwt延时失效怎么解决的

  • 相关阅读:
    4---Linux:gcc,g++编译/制作并调用静态库,动态库/makefile
    迟滞比较器仿真
    计算机里一半的部件是什么
    Mining Association Rules between Sets of Items in Large Databases
    【RocketMQ系列一】初识RocketMQ
    中集集团全球港航人工智能高科技独角兽中集飞瞳贯彻国家智慧港口战略,全球最先进港航AI核心技术和工业级产品超一流智慧港口解决方案
    二维码的秘密(生成原理)
    svg图片代码data:image/svg+xml转png图片方法
    氨基化/环氧化/胺化/羧基化/巯基改性/笼空状磺化聚苯乙烯微球相关制备
    C#-特性
  • 原文地址:https://blog.csdn.net/weixin_47188125/article/details/126553799
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号