用户登录权限

文章目录

    • @[TOC](文章目录)
  • 前言
  • 一、鉴权
  • 二、 Cookie与session
    • 1.HTTP无状态
    • 2.cookie的重要属性
    • 3.cookie 和 session 的生命周期
      • 3.1 cookie 生命周期影响因素
      • 3.2 session 生命周期影响因素
    • 4.cookie 和 session 的区别
    • 5.工作原理
    • 3 用户登录Node.js和Express验证session
  • 三、JSON Web Token
    • 1. JWT 介绍
    • 2. JWT 组成部分
    • 3.JWT 的原理
    • 4.用户登录Node.js和Express验证JWT
  • 四、补充token
    • 什么是 token(令牌)?
      • Accesss Token
      • Refresh Token

前言

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


一、鉴权

  • 鉴权:对用户访问系统进行权限控制

1. 什么是认证?

  • 验证当前用户的身份
  • 互联网常用认证:
    1.用户名密码登录
    2.邮箱发送登录链接
    3.手机号接收验证码

2. 什么是授权?

  • 用户授予第三方应用访问该用户某些资源的权限
  • 实现授权的方式:cookie、session、token、OAuth

3. 什么是凭证?

  • 实现认证的授权的媒介

二、 Cookie与session

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

1.HTTP无状态

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

2.cookie的重要属性

属性说明
name = value键值对,设置cookie的名称,字符串类型
domain指定cookie所属域名
path指定cookie在哪个路由下生效,默认’/’
maxAgecookie失效时间,单位秒。整数:cookie在maxAge秒后失效;负数:关闭浏览器即失效,浏览器不保存该cookie;0:删除cookie;默认-1
expires过期时间
securecookie是否被使用安全协议(HTTPS,SSL)传输。
httpOnly一定程度上防止XSS攻击

3.cookie 和 session 的生命周期

3.1 cookie 生命周期影响因素

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

3.2 session 生命周期影响因素

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

4.cookie 和 session 的区别

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

为什么session 比 cookie 更安全?

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

5.工作原理

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)。它将用户信息加密到token里,服务器不保存任何用户信息;服务器通过使用保密的密钥验证token的正确性,正确 放行。(目前最流行的跨域认证解决方案)

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 的原理

在这里插入图片描述

  • JWT认证流程
  • 用户输入用户名/密码登录,服务端认证成功,返回给客户端一个JWT
  • 客户端将 token 保存到本地
  • 当用户访问一个受保护的路由或者资源的时候,需要请求头的Authorization字段中使用 Bearer 模式添加JWT
  • 服务端的保护路由将会检查请求头Authorization中的JWT信息,合法,允许用户的行为。

为什么要使用JWT?

  • 相比XML格式,JSON更加简洁,编码之后更小,使JWT更加适合在HTML和HTTP环境中传递。
  • 因为JWT是自包含的(内部包含一些会话信息),减少了查询数据库的需要
  • JWT 不使用cookie,在使用域名提供的API服务不需要担心跨域资源共享问题。
  • JWT 是一种无状态的认证机制,用户状态不再存储在服务器的内存中。
    安全性更好

在这里插入图片描述

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');
});

四、补充token

什么是 token(令牌)?

Accesss Token

  1. 访问资源接口(API)时所需的资源凭证

token组成

  • uid:用户唯一的身份标识
  • time:当前时间的时间戳
  • sign:签名
  1. token 的验证流程
    在这里插入图片描述
  • 客户端使用用户名、密码请求登录
  • 服务端收到请求,验证用户名、密码
  • 验证成功,服务端签发一个 token 并发送给客户端
  • 客户端收到 token,将其存储在 cookie或者localStorage 中
  • 客户端每次向服务端请求资源,带着服务签发的 token
  • 服务端收到请求,验证客户端请求里的 token,成功,返回请求数据给客户端。

Refresh Token

  • refresh token 是专用于刷新 accesss token的token,解决了每次刷新都需要用户输入用户名、密码的问题

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

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

相关文章

LinuxBasicsForHackers笔记 -- 管理用户环境变量

查看和修改环境变量 env – 您可以通过从任何目录在终端中输入 env 来查看所有默认环境变量。环境变量的名称始终为大写,如 HOME、PATH、SHELL 等。 查看所有环境变量 set – 查看所有环境变量,包括 shell 变量、局部变量和 shell 函数(例…

记一次测试环境git翻车经历

本来想拉一个功能分支进行新的功能开发,合并代码发现没有冲突居然有文件被修改了,贸然选择最近的一次回滚提交,没想到不假思索的push -f 导致一部分dev主干的代码不见了。 事故记录 开发分支origin/dev,功能分支file 合并之后发…

UE Websocket笔记

参考链接 [UE4 C入门到进阶]12.Websocket网络通信 - 哔哩哔哩 包含怎么用Nodejs 写测试服务器 UE4_使用WebSocket和Json(上) - 知乎 包含Python写测试服务器 UE4_使用WebSocket和Json(下) - 知乎 示例代码 xxx.Build.cs"W…

带有 RaspiCam 的 Raspberry Pi 监控和延时摄影摄像机

一、说明 一段时间以来,我一直想构建一个运动激活且具有延时功能的树莓派相机,但从未真正找到我喜欢的案例。我在thingiverse上找到了这个适合树莓派和相机的好案例。它是为特定的鱼眼相机设计的,但从模型来看,我拥有的廉价中国鱼…

重温经典struts1之常用标签

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前言 上一篇,我们学习了struts的基本概念,怎样搭建struts开发环境,从编写formbean,action到jsp页面,以及怎样将他…

Flink之流的转换

ProcessFuncion处理函数 功能 拥有富函数功能 - 生命周期方法 - 状态编程对元素的处理功能processElement, 在不同的处理函数中,该方法的名字略有区别定时器编程 TimeService:定时服务,可以用于注册定时器,删除定时器ontimer():定时器触发后会自动调用该…

C++中字符串详解

在C语言中只能通过字符串数组来模拟字符串,没有字符串类型。在C引入了string类来表示字符串类型。从而用它定义字符串。 在C语言中: char str[] "abc"; char str[] {a,b,c,\0}; char* str "abc"; //这三种形式是C语言…

Java TCP(一对一)聊天简易版

客户端 import java.io.*; import java.net.Socket; import java.util.Date; import javax.swing.*;public class MyClient {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;private Date data;p…

推荐一个FL Studio最适配的midi键盘?

Hello大家好!好消息!好消息!特大好消息! 水果党们!终于有属于自己的专用MIDI键盘啦! 万众期待的Novation FLKEY系列 正式出炉! 做编曲和音乐制作的朋友们,对水果软件FLSTUDIO应该…

使用xshell连接虚拟机(服务器)

作者:余小小 Xshell Xshell [1] 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 Xshell可以…

2023年度盘点:智能汽车、自动驾驶、车联网必读书单

【文末送书】今天推荐几本自动驾驶领域优质书籍 前言 2023年,智能驾驶和新能源汽车行业仍然有着肉眼可见的新进展。自动驾驶技术继续尝试从辅助驾驶向自动驾驶的过渡,更重要的是相关技术成本的下降。根据《全球电动汽车展望2023》等行业报告&#xff0c…

vue-baidu-map实现在地图上选择范围并解决相关问题

vue-baidu-map实现在地图上选择范围并解决相关问题 实现地图上选择不规则范围实现功能遇到的问题1、覆盖物多边形怎么才能盖住覆盖物点2、遇到其他问题 实现地图上选择不规则范围 这个功能比较简单,只需要使用vue-baidu-map插件的覆盖物多边形功能就行了。直接看文…

dToF直方图之美_激光雷达多目标检测

直方图提供了一种简单有效的方法来分析信号分布并识别与目标存在相对应的峰值,并且能够可视化大量数据,让测距数形结合。在车载激光雷达中,对于多目标检测,多峰算法统计等,有着区别于摄像头以及其他雷达方案的天然优势。 如下图,当中有着清晰可见的三个峰值,我们可以非…

Java智慧校园-中小学校园管理系统源码

智慧校园系统是通过信息化手段,实现对校园内各类资源的有效集成 整合和优化,实现资源的有效配置和充分利用,将校务管理过程的优化协调。为校园提供数字化教学、数字化学习、数字化科研和数字化管理。 致力于为家长和教师提供一个全方位、多层…

消费增值:一种改变消费观念的新模式

据统计,全球电子商务市场在过去的五年内以每年20%的速度增长,预计到2025年将达到5.5万亿美元。然而,在这个庞大的市场中,消费者在购物后往往只获得了商品或服务本身,而没有获得更多的附加价值。为了改变这种消费观念&a…

内网穿透的应用-如何结合Cpolar内网穿透工具实现在IDEA中远程访问家里或者公司的数据库

文章目录 1. 本地连接测试2. Windows安装Cpolar3. 配置Mysql公网地址4. IDEA远程连接Mysql小结 5. 固定连接公网地址6. 固定地址连接测试 IDEA作为Java开发最主力的工具,在开发过程中需要经常用到数据库,如Mysql数据库,但是在IDEA中只能连接本…

SpringMVC项目出现404

目录 问题讲解: 解决方案: 1、处理器映射器和处理器适配器以及视图解析器没有配置好 2、Controller的包扫描没有加或者包扫描的配置是错误的 3、当然也有说jar包没有 4、请求地址是错误的 5、还有一种解决办法说web.xml配置DispatcherServlet的时…

Android Studio的笔记--String和byte[]

String和byte[]的相互转换,字节数组转换 String转换byte[]文本16进制字节数组 byte[]转换String文本16进制 其它 String转换byte[] 文本 将字符串(String)转换为字节(byte)的方法。默认使用的是UTF-8编码 StandardCh…

二叉树题目:在受污染的二叉树中查找元素

文章目录 题目标题和出处难度题目描述要求示例数据范围 前言解法一思路和算法代码复杂度分析 解法二思路和算法代码复杂度分析 题目 标题和出处 标题:在受污染的二叉树中查找元素 出处:1261. 在受污染的二叉树中查找元素 难度 5 级 题目描述 要求…

脱碱软化树脂Tulsimer CXO-5 MP 高盐水除钙镁树脂

一、产品介绍 Tulsimer CXO-5 MP 是一款大孔弱酸性丙烯酸系阳离子交换树脂,能除去水中的碱度和硬度,特别是除去水中的碳酸氢盐、碳酸盐及其它碱性盐类,适合运用于纯水 ,脱碱软化及选择性的去除重金属。适合在宽广的 pH 及温度范围情况下操作…