jwt单点登录_了解前端,爱上前端 | 网站各种登录方式对比

news/2024/5/9 14:31:13/文章来源:https://blog.csdn.net/weixin_39778106/article/details/110801378

传统网页登录

最简单的登录方式,是在每一次使用系统的时候进行身份的鉴定,一旦认证信息过期了,便跳出登录界面,让用户输入用户名和密码。

将用户名和密码通过加密处理后,发到后端进行登录认证。后端会依据此次会话的时间、用户的信息创建一个session id,将session id看作是此次会话的唯一标识。并将session id写到cookie中,在每一次的请求中都携带过去,以认证用户的身份。

但是这样有三个问题,

  • 一是,如果是公司内部的服务,每个系统都有一个登录模块,使用者就要在每一次使用系统的时候都进行登录操作,记住每一个系统的账号和密码,这样实在没有必要。
  • 二是,如果后端的服务器不止一个怎么办,登录时创建的session id存储在登录的服务器上,但是某一次请求如果被打到其他服务器上,其他服务器并不知道上下文,如何判断用户信息呢?
  • 三是,将身份认证存储在cookie中会不会带来一些隐藏的问题

正是因为有了这些问题,才有了后续针对问题解决办法。

单点登录

考虑到第一个问题,公司内部服务多采用单点登录,即一次登录便可访问所有的互相信任的系统。

这种只需要登录一次的解决方法,叫做单点登录(single sign on)。

SSO的核心是通过共享cookie中的session id做到的。
假设A系统使用的是SSO系统提供的登录认证。

  1. 当访问A系统的后端数据时,判断请求的cookie中是否含有session id
  2. 如果有,则携带session id去请求后端的接口,后端通过请求中的session id认证用户信息。
  3. 如果没有,则通过302重定向到SSO页面,进行用户的登录。
  • 如果用户没有在SSO系统上登录过,则跳转到SSO系统的login界面进行用户的登录。
  • 如果用户在SSO系统中登录过,则将用户对应的ticket granting ticket拼接到重定向到login的url(也就是1中访问A系统的后端接口)上再次访问。
  • 这时A系统的后端就接收到了一个含有ticket的请求,A后端访问SSO后端提供的校验接口进行ticket的认证,判断请求的真伪。
  • 如果用户信息校验为真,则由A后端根据用户信息、时间等构造session-id并set-cookie。
  • 如果用户信息校验为假,则进行相应的报错,或是再重定向到SSO进行再次登录。
具体CAS流程图如下:

20e51537f4c259cb2a77f861c5e8170f.png
更详细的SSO流程解释可参考阿里云上的
单点登录(SSO)看这一篇就够了-云栖社区-阿里云​yq.aliyun.com
0d4cdb7e13373ccf5f7a1f2e84c3cd68.png

JWT登录

不管是否使用了SSO,针对用户的信息的鉴定和存储都是通过session id去实现的。
这样会存在上面说到的后两个问题,展开来说应该有三个:

  1. 通过session id进行鉴权,需要在服务器上额外存储信息,进行session id和用户表的关联,增加数据库负担
  2. 如果后端对应多个服务器,通过负载均衡等方式,进行请求的分配,如果在每一个服务器上都存储session id和用户信息的对应关系,不但会增加数据库的负担也增加了服务器之间不必要的通信,无疑是不合适的;但是如果不进行信息的存储,则服务器无法进行鉴权。
  3. session id存储在cookie中
  • 一来,会导致安全问题,cookie是可见的,可以被其他用户冒用,如CSRF攻击
  • 二来,会收到针对cookie的一些跨域策略的限制,如sameSite等

因此,综合考量,可以使用JWT方式进行鉴权,以避免上述问题。

JWT

JWT,即json web token,首先能明确的一点是这个token本质上是一个json格式的数据。

990a40ba1add976c17fc65e6f5c46468.png


JWT分为三个部分:

  • 头部 header
    • 说明加密的应用在signature中的加密算法
  • 有效载荷 payload
    • 用户信息等
  • 认证信息 signature
    • 前两个信息的加密

对应的使用JWT有以下几个好处

  1. 当服务器有多个,通过负载均衡进行请求的分配时,不需要考虑session id与用户信息的对应关系,拿到token进行鉴权和解析即可。
    1. 一来,不需要考虑session id的存储问题,减少了存储负担和每次解析请求的查询负担。
    2. 二来,由于没有session id的对应关系了,所以在分布式机器的情况下更适用。根据对应字段直接鉴权,解析即可。
  2. 当使用单点登录,后端在做鉴权的时候,不需要拿到ticket之后再去与SSO的后端进行交互,可以直接通过SSO系统中提供的公钥进行信息的鉴权,减少了后端与SSO系统交互的过程。
  3. 通过JWT构成的token可以放在cookie里也可以放在http头中,放在header里可以避免因为cookie限制导致的隐形问题。

JWT只是一种方法,可以用于单点登录,也可以用于单一系统,差别仅是JWT的token是SSO系统生成还是该单一系统后端生成而已。

更多详细的JWT内容可见
JWT官网​jwt.io

总结

随着场景的变化,登录的情况越来越复杂。

由于希望同个公司的多个系统不需要多次重复登录所以出现了「单点登录」的方式。

由于考虑到session id存储带来的额外负担,因此出现了JWT的登录方式。

随着Chrome对cookie限制的提高(文章网络安全中开发案例的描述),将session id登录方式改为JWT已经变成了一种趋势。

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

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

相关文章

这么多编程学习网站,总有一个适合你吧

点击上方“阿拉奇学Java”,选择“置顶或者星标” 每天早晨00点00分,与你相约!往日回顾:Java 处理 Exception 的 9 个最佳实践,你做对了吗?前 言今天分享几个适用于编程开发自学的学习网站,主要涉及编程学习…

近期你已经授权登录过_原来你的qq授权登录过这么多的网站 一键查出撤销了吧...

现在好多网站都支持社交账号登录,而我每次习惯直接点击QQ的一键登录,然后QQ就会提示授权给该网站,时间一长,根本不记得自己的QQ账号究竟注册过哪些网站了。而且有些网站还会时不时的给你推送一些消息,很是烦人&#xf…

用 Nginx 禁止国外 IP 访问我的网站..

来源:toutiao.com/i6860736292339057156/先来说说为啥要写这篇文章,之前看了下 Nginx 的访问日志,发现每天有好多国外的 IP 地址来访问我的网站,并且访问的内容基本上都是恶意的。因此我决定禁止国外 IP 来访问我的网站。想要实现…

怎样给一个php网站搬家

PHP网站分为网站程序和数据库两部分,因此搬家时要分2部分考虑:一是程序,二是数据。 程序部分: 比如旧空间是discuz3.4版本,那么新空间也要安装一个全新的discuz3.4版本。注意版本要一致,后期导入数据库才不…

洛奇英雄传老福单机版服务器不显示,洛奇英雄传:永恒官方网站-这一次让经典成为永恒...

公会教学:玩法套路全领悟2017年02月27日今天跟大家分享下《洛英:永恒》的公会玩法,一个决定了在游戏里是当一个万人敬仰的大佬还是一条躺尸的咸鱼的玩法。小伙伴们等级到达十一级之后,游戏就会开启公会玩法了。此时大家会面临两个…

基于django的视频点播网站开发-step14-数据总览功能

数据总览功能,是对网站中产生的数据进行一个统计,统计出视频数、发布数、用户数、评论数,等等。让管理者对网站数据有一个清晰的认识,做到心中有数。 在本站中,笔者一共列举了下面几种数据:视频数、发布中未…

小浩算法网站上线啦!

小浩算法的配套学习网站上线了,虽然还很简陋,虽然内容还没有完全整编进去,虽然还没对每道题目都加上各语言的代码。但是,我还是让它上线啦。http://www.geekxh.com这不是我第一次做网站了,好多年前就用 WordPress 搭建…

全宇宙著名网站中使用的编程语言

为什么80%的码农都做不了架构师?>>> 全宇宙最流行也就是访问巨大的网站有个共同之处,那就是动态的网站。下面看看这些宇宙之最网站所使用的编程语言: 转载于:https://my.oschina.net/766/blog/211248

如何制作出吸引潜在用户的网站?

我们都知道企业建网站目的得到更多的潜在用户,那么现在建出企业需求的、吸引潜在用户的网站呢? 下面搜客建站就来和大家说说:如何制作出吸引潜在用户的网站? 一、网站页面的风格设计 设计网站就好比我们平时评论一个女人美不美…

网站软件开发规范(某门户网站的)

网站软件开发规范(某门户网站的) --------------------------------------------------------------------------------1数据库使用规范1.1服务器上有关数据库的一切操作只能由服务器管理人员进行。1.2程序中访问数据库时使用统一的用户、统一的连接文件访问数据库。1.3原则上…

【前端】低版本IE浏览器访问网站一片空白

最近在客户那里,发现一个奇葩的问题,系统上IE浏览器访问网站一片空白,显示无法访问。 但是相同的网站系统,在我们的电脑上又可以访问且IE浏览器版本相同,没法只有,装虚拟模拟客户环境复现一下了。 发现在客…

DNS与网站访问流程

1:dns与网址url简介 DNS是域名系统(DomainNameSystem)的缩写,域名系统是一中庞大而复杂的系统,但我们这里讲解重心并不是这个系统,而是指本地电脑dns是什么 讲到dns,我们就不得不讲讲网址和域名,我们经常会…

Apache网站的概述

一:Web服务概述 在Internet应用中,Web服务无疑是最为主流的应用系统,有了web站点,企业可以充分展示自己的产品,公司,宣传自己的企业形象,提供各种网上交流,业务平台,电子…

Apache网站的部署

一:Apache部署 方法一: https://www.apache.org/在网站 https://www.apache.org/ 中下载软件包 点击download 下载 找到httpd-2.4.46.tar.gz,右键复制链接 wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.46.tar.gz …

四:Tomcat自定义默认网站目录

1&#xff1a;自定义默认网站目录 《1》&#xff1a; mkdir -pv /web/webapp 创建 《2》&#xff1a; vim /web/webapp/index.jsp 编写文件 《3》&#xff1a;写入&#xff1a; <% page language"java" import"java.util.*" pageEncoding"UTF…

GitHub代下载(文件加速)网站列表

本文作者: 峡州仙士 原文链接: https://cjh0613.github.io/blog/githubproxy.html 声明: 如文章有更新&#xff0c;将先在本网站&#xff08;峡州仙士之页&#xff09;发布&#xff01;&#xff08;可百度&#xff09;| 本网站所有文章除特别声明外&#xff0c;均采用 BY-NC-SA…

您与所提供的网站有什么关系? 告诉我们一些关于您的业务的情况。

您与所提供的网站有什么关系? 告诉我们一些关于您的业务的情况。谁是您的客户&#xff0c;他们为您支付了什么&#xff1f;这两个怎么填? 老是说无效文本&#xff1f; 答&#xff1a;很多朋友在注册payoneer账户的时候&#xff0c;资金入账前&#xff0c;填写全球支付服务问…

网站首页 - 导航条和轮播图的实现(bootstrap)

效果图: Bootstrap: 组件 (静态CSS) JS插件(动态JS) 反色导航条: 基本都是去bootstrap官网(组件-导航条)复制过来, 改一改文字內容即可. bootstrap可参考: https://blog.csdn.net/qq_42986107/article/details/82929465 <!-- 反色导航条组件 --> <nav class"n…

建站环境学习一:宝塔面板安装

建站环境学习一&#xff1a;宝塔面板安装 安装宝塔面板的原因是因为方便&#xff0c;简单&#xff0c;一键配置的网络环境&#xff0c;安装只要用下面的链接&#xff08;看版本&#xff09;下载&#xff0c;教程慢慢更新 Debain的&#xff1a; wget -O install.sh http://do…

建站学习二:宝塔面板环境安装

建站学习二&#xff1a;宝塔面板环境安装 按照建站学习一 https://blog.csdn.net/yichurou2981/article/details/82315926 登录后&#xff0c;会出现以下界面&#xff0c;可以按照默认的安装&#xff0c;nginx比较小&#xff0c;适合内存不大的机&#xff0c;apache比较占资…