用户登录权限

文章目录

    • @[TOC](文章目录)
  • 前言
  • 一、 Cookie与session
    • 1.HTTP无状态
    • 2.cookie 和 session 的生命周期
      • 2.1 cookie 生命周期影响因素
      • 2.2 session 生命周期影响因素
    • 3.cookie 和 session 的区别
    • 4.工作原理
    • 3 用户登录Node.js和Express验证session
  • 二、JSON Web Token
    • 1. JWT 介绍
    • 2. JWT 组成部分
    • 3.JWT 的原理
    • 4.用户登录Node.js和Express验证JWT

前言

本文记录了用户登录的两种鉴权方式,以及相关知识点的记录。


一、 Cookie与session

  • cookie和session是来实现状态的记录,都是由服务器生成,用来存储特定的值。
  • 一般情况下,在服务器端,session的存储方式:文件方式、数据库方式,用 sessionId 来识别。
  • 客户端(浏览器)在发送请求的时候,会自动将存活、可用的cookie封装在请求头(headers)中和请求一起发送。

1.HTTP无状态

  • HTTP 协议是无状态的,无状态意味着,服务器无法给不同的客户端响应不同的信息。这样一些交互业务就无法支撑。

2.cookie 和 session 的生命周期

2.1 cookie 生命周期影响因素

  • cookie自身的存活时间:是服务器生成cookie时去设定的。
  • 客户端是否保留cookie。对客户端自身有影响,对其它封包工具无影响。

2.2 session 生命周期影响因素

  • 服务器对于session对象保存的最大时间设置。
  • 客户端进程是否关闭。对客户端自身有影响,对其它封包工具无影响。

3.cookie 和 session 的区别

  • 存储位置:cookie 是存在客户端,session是存在服务端。
  • 安全性:session 比 cookie 更安全。
  • 存储内容:Session中存储的是对象,而Cookie中存储的是字符串。
  • 保持时间:Session随会话结束而关闭,而Cookie可以长期保存在客户端,除非被设置过期或者被删除。
  • 对服务器压力:每个用户都会产生一个session,如果并发访问的用户过多,就会产生非常多的session,耗费大量的内存。

为什么session 比 cookie 更安全?

  • cookie 是存储在客户端的,可见、可改变。
  • session 存储在服务器端,不可见,不可改变。

4.工作原理

1、用户向服务器发送用户名和密码。
2、服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等。
3、服务器向用户返回一个 session_id,写入用户的 Cookie。
4、用户随后的每一次请求,都会通过 Cookie,将 session_id 传回服务器。
5、服务器收到 session_id,找到前期保存的数据,由此得知用户的身份。

在这里插入图片描述

3 用户登录Node.js和Express验证session

  • express 引入会自动生成加密的 sessionId, 然后校验session
const express = require("express");
const session = requrie("express-session");
const MongoStore = require("connect-mongo")
const app = express();
//注册session
app.use(session({secret:"this is session",//服务器生成sessionresave:true,saveUninitialized:true,//强制将初始化的session 存储cookie:{maxAge:100 * 60 * 10, //过期时间secure:false, //为true的时候只有 https 协议才能访问cookie},rolling:true, //true:超时前刷新,cookie会重新计时//false:超时前刷新多次,按第一次刷新计时store:MongoStore.create({mongoUrl:'mongodb://127.0.0.1:27017/vv_session',ttl: 1000 * 60 * 10, //过期时间}),})
);
//设置session
app.use((req,res,next)=>{if(req.url === "/login"){next()return;}if(req.session.user){req.session.garbage = Date();next();}else{res.redirect("/login")}
})
//注销session

二、JSON Web Token

1. JWT 介绍

  • JSON Web Token(JWT),又称为JSON令牌,是一种用于在网络应用之间安全地传输信息的开放标准(RFC 7519)。它采用了一种紧凑的、自包含的方式来表示信息,通常用于身份验证和授权。JWT的设计目标是确保信息的完整性和安全性,同时具备易于使用和传输的特点。

2. JWT 组成部分

  • Header (头部):是一个 JSON 对象,通常由 token 类型和签名算法名两部分组成。
    { "alg": "HS256", //示签名的算法(algorithm) "typ": "JWT" //表示这个令牌(token)的类型(type) }
  • Payload(载荷):也是一个 JSON 对象,用来存放实际需要传递的数据,通常会被base64url编码

JWT 规定了7个官方字段

  • iss (issuer):签发人
  • exp (expiration time):过期时间
  • sub (subject):主题
  • aud (audience):受众
  • nbf (Not Before):生效时间
  • iat (Issued At):签发时间
  • jti (JWT ID):编号
  • Signature(签名):将Header和Payload部分组合起来,防止数据篡改。

3.JWT 的原理

  • 服务器认证以后,生成一个 JSON 对象,发回给用户,以后在用户与服务端通信的时候,都要发回这个 JSON 对象。服务器完全只靠这个对象认定用户身份。为了防止用户篡改数据,服务器在生成这个对象的时候,会加上签名。
    在这里插入图片描述

4.用户登录Node.js和Express验证JWT

const express = require('express');
const jwt = require('jsonwebtoken');const app = express();
const secretKey = 'your-secret-key';// 中间件:验证JWT
const verifyToken = (req, res, next) => {const token = req.headers.authorization;if (!token) {return res.status(401).json({ message: '无法验证身份' });}jwt.verify(token, secretKey, (err, decoded) => {if (err) {return res.status(401).json({ message: '身份验证失败' });}req.user = decoded;next();});
};// 路由:受保护的资源
app.get('/protected', verifyToken, (req, res) => {res.json({ message: '欢迎访问受保护的资源', user: req.user });
});// 路由:生成JWT
app.post('/login', (req, res) => {const user = { id: 1, username: 'user123' };const token = jwt.sign(user, secretKey, { expiresIn: '1h' });res.json({ token });
});app.listen(3000, () => {console.log('服务器运行在端口 3000');
});

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

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

相关文章

Aesthetically Relevant Image Captioning 美学上相关的图像字幕

1.摘要 图像美学质量评估(AQA)旨在为图像指定数字美学等级,而图像美学字幕(IAC)旨在生成图像美学方面的文本描述。在本文中,我们研究了图像AQA和IAC,并提出了一种新的IAC方法,称为审美相关图像字幕(ARIC)。基于大多数图像的文本评…

如何通过内网穿透工具实现任意浏览器远程访问Linux本地zabbix web管理界面

前言 Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 本地zabbix web管理界面限制在只能局域…

解密防泄密成功密码:银行机构案例分享迅软DSE带你走过风险之路!

近日,央行发布了《中国人民银行业务领域数据安全管理办法(征求意见稿)》,旨在落实《数据安全法》有关要求,加强中国人民银行业务领域数据安全管理。 从银行业务领域来看,数据主要涉及各类市场交易数据、金…

(附源码)基于ssm校园体育设施管理系统小程序-计算机毕设 70715

ssm校园体育设施管理系统小程序 摘 要 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,校园体育设施管理系统小程…

事务--03---分布式系统唯一ID

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 分布式ID一、什么是分布式系统唯一ID2. 二、分布式系统唯一ID的特点 分布式ID-----实现方案1、使用UUID生成分布式ID2、基于数据库自增ID3、Redis生成ID4、号段模式…

Excel COUNT类函数使用

目录 一. COUNT二. COUNTA三. COUNTBLANK四. COUNTIF五. COUNTIFS 一. COUNT ⏹用于计算指定范围内包含数字的单元格数量。 基本语法 COUNT(value1, [value2], ...)✅统计A2到A7所有数字单元格的数量 ✅统计A2到A7,B2到B7的所有数字单元格的数量 二. COUNTA ⏹计…

钓鱼网站域名识别工具dnstwist算法研究

先上一个AI的回答: dnstwist是一种钓鱼网站域名识别工具,可帮助用户识别和检测可能被恶意使用的域名。它通过生成类似的域名变体来模拟攻击者可能使用的钓鱼域名,并提供了一系列有用的功能和信息。 dnstwist能够生成一组类似的域名变体&…

Python 自动化用处居然这么多!python自动整理文件,一键完成!

随着时代的发展及人工智能的到来,Python 自动化办公能力几乎已成为每个岗位的必备技能! 而且到处可见的抖音、朋友圈铺天盖地宣传 Python 可以轻松达到办公自动化,并且学习没门槛,是真的吗? 我很负责的告诉大家&#…

【高数:3 无穷小与无穷大】

【高数:3 无穷小与无穷大】 1 无穷小与无穷大2 极限运算法则3 极限存在原则4 趋于无穷小的比较 参考书籍:毕文斌, 毛悦悦. Python漫游数学王国[M]. 北京:清华大学出版社,2022. 1 无穷小与无穷大 无穷大在sympy中用两个字母o表示无…

15:00面试,15:06就出来了,问的问题太变态了。。

刚从小厂出来,没想到在另一家公司我又寄了。 在这家公司上班,每天都要加班,但看在钱给的比较多的份上,也就不太计较了。但万万没想到5月一纸通知,所有人不准加班了,不仅加班费没有了,薪资还要降…

基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(三)——serverless数据分析

3 serverless数据分析 大纲 3 serverless数据分析3.1 创建Lambda3.2 创建API Gateway3.3 结果3.4 总结 3.1 创建Lambda 在Lambda中,我们将使用python3作为代码语言。 步骤图例1、入口2、创建(我们选择使用python3.7)3、IAM权限(…

day16_java多线程(入门了解)

多线程入门 一、线程和进程 进程 进程:是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间和系统资源,一个应用程序可以同时运行多个进程;进程也是程序的一次执行过程,是系统运行程序的基本单位&#xff1…