鉴权html5服务器,前端鉴权知识学习

article/2025/9/19 6:43:14

1、Cookie

指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。

HTTP是一种无状态传输协议,它不能以状态来区分和管理请求和响应。也就是说,服务器单从网络连接上无从知道客户身份。于是给客户端发布一个通行证—cookie来区分,这就是Cookie的工作原理。

服务器通过response的set-cookie告诉客户端去写入cookie,后面的请求都会携带该cookie。

8a8f570982525d217a3ec8604cf5c3df.png

cookie有以下重要参数:

6c66ca6872cad5429b63395055aae196.png

2、Session

session 是另一种记录服务器和客户端会话状态的机制。session存储在服务器端,该会话对应的key即sessionId会被存储到客户端的cookie中。

dc955e7a219223311249f7f91af57f59.png

根据以上流程可知,session通过cookie来传递sessionId,达到用户鉴权的目的。除此之外,sessionId也可以不通过cookie传递,比如通过response返回客户端,再当作请求的参数传递给服务器去验证。

Cookie 和 Session 对比

安全性: Session 比 Cookie 安全,Session 是存储在服务器端的,Cookie 是存储在客户端的。

存取值的类型:Cookie只支持存字符串数据,想要设置其他类型的数据,需要将其转换成字符串,Session 可以存任意数据类型。

有效期: Cookie可设置为长时间保持,比如我们经常使用的默认登录功能,Session 一般失效时间较短,客户端关闭(默认情况下)或者 Session 超时都会失效。

存储大小: 单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie,但是当访问量过多,会占用过多的服务器资源。

session缺点:

占资源: 每个经过认证的用户都要存放session到内存中,而随着认证用户的增多,服务端的开销较大。

CSRF攻击:基于cookie来进行用户识别时,用户cookie如果被截获,就容易受到跨站请求伪造的攻击。

3、Token

token(令牌) 是一串字符串,通常作为鉴权凭据,最常用的使用场景是 API 鉴权。

一般来说 token 主要有三种:

自定义的 token:开发者根据业务逻辑自定义的 token

JWT:JSON Web Token,定义在 RFC 7519 中的一种 token 规范

Oauth2.0:定义在 RFC 6750 中的一种授权规范,其实并不是一种 token,只是其中也有用到 token。

token特点:

服务端无状态化、可扩展性好

支持移动端设备

安全性高

支持跨程序调用

token鉴权流程:

44c47c2b1d79f1f3f7ba6a2bbf70c01c.png

Refresh Token

refresh token 是专用于刷新 access token 的 token。Access Token的有效期比较 短,当 Acesss Token 由于过期而失效时,使用 Refresh Token 就可以获取到新的 Token,如果 Refresh Token过期就只能重新登陆了。

170fe763e5d42fe01495816bd273dd96.png

Token 和 Session 的区别

Session 是一种记录服务器和客户端会话状态的机制,使服务端有状态化,可以记录会话信息。而 Token 是令牌,访问资源接口(API)时所需要的资源凭证。Token 使服务端无状态化,不会存储会话信息。

Session 和 Token 并不矛盾,作为身份认证 Token 安全性比 Session 好,因为每一个请求都有签名还能防止监听以及

重放攻击

,而 Session 就必须依赖链路层来保障通讯安全了。如果你需要实现有状态的会话,仍然可以增加 Session 来在服务器端保存一些状态。

所谓 Session 认证只是简单的把 User 信息存储到 Session 里,因为 SessionID 的不可预测性,暂且认为是安全的。而 Token ,如果指的是 OAuth Token 或类似的机制的话,提供的是 认证 和 授权 ,认证是针对用户,授权是针对 App 。其目的是让某 App 有权利访问某用户的信息。

4、JWT

JSON Web Token(简称JWT)是目前最流行的跨域认证解决方案,是一种认证授权机制,是一种基于 JSON 的开放标准。

JWT组成

一个 JWT token 是一个字符串,它由头部、载荷与签名三部分组成,中间用 . 分隔,形式如下:

base64(header).base64(json payload).signature

复制代码

JWT 认证流程:

用户输入用户名/密码登录,服务端认证成功后,会返回给客户端一个 JWT。

客户端将 jwt 保存到本地,当用户希望访问一个受保护的路由或者资源的时候,需要请求头的 Authorization 字段中使用 Bearer 模式添加 JWT 。

服务端的保护路由将会检查请求头 Authorization 中的 JWT 信息,如果合法,则允许访问。因为 JWT 内部包含了一些用户信息,因此减少了需要查询数据库的需要。

JWT 的使用方式

1、存放在cookie中

当用户希望访问一个受保护的路由或者资源的时候,可以把它放在 Cookie 里面自动发送,但是这样不能跨域。

2、存放在localstorage中,添加到header中发送

请求时放在 HTTP 请求头信息的 Authorization 字段里,使用 Bearer 模式添加 JWT。

Authorization: Bearer

复制代码

3、通过接口参数

可以把 JWT 放在 POST 请求的数据体里,或者通过 URL 的 queryString 传输。

自定义Token 和 JWT 的关系

相同点:

都是访问资源的令牌,都可以记录用户的信息,都是使服务端无状态化,都是只有验证成功后,客户端才能访问服务端上受保护的资源

区别:服务端验证客户端发来的token信息要进行数据的查询操作;JWT验证客户端发来的token信息就不用, 在服务端使用密钥校验就可以,不用数据库的查询。

5、各种鉴权方式注意点

使用 cookie 注意点

因为存储在客户端,容易被客户端篡改,使用前需要验证合法性

不要存储敏感数据,比如用户密码,账户余额

使用 httpOnly 在一定程度上提高安全性

尽量减少 cookie 的体积,能存储的数据量不能超过 4kb

设置正确的 domain 和 path,减少数据传输

cookie 无法跨域,子域名可以访问父域名

一个浏览器针对一个网站最多存 20 个Cookie,浏览器一般只允许存放 300 个Cookie

移动端对 cookie 的支持不是很好,而 session 一般基于 cookie 实现,所以移动端常用的是 token

使用 session 注意点

用户同时在线量较多时,session 存储在服务器会占据较多内存,需要定期清理过期 的 session

当网站采用集群部署的时候,会遇到多台 web 服务器之间如何做 session 共享的问题。因为 session是由单个服务器创建的,处理用户请求的服务器不一定是 那个创建 session 的服务器,那么该服务器就无法拿到之前已经放入到 session 中的登录凭证之类的信息了。

当多个应用要共享 session时,因为不同的应用可能部署的主机不一样需要在各个应用做好 cookie 跨域的处理。

sessionId 是存储在 cookie 中的,假如浏览器禁止 cookie 或不支持 cookie ,一般会把 sessionId 跟在 url 参数后面即重写 url,所以 session 不一定非得需要靠 cookie 实现

使用 token 注意点

如果你认为用数据库来存储 token会导致查询时间太长,可以选择放在 内存当中,比如 redis 很适合你对 token 查询的需求。

token 完全由应用管理,所以它可以避开同源策略

token 可以避免 CSRF 攻击(因为不需要 cookie 了)

移动端对 cookie 的支持不是很好,而 session 需要基于 cookie 实现,所以移动端常用的是 token

使用 JWT 时需要考虑的问题

JWT 默认是不加密,但也是可以加密的。生成原始 Token 以后,可以用密钥再加密一次。

JWT 不加密的情况下,不能将秘密数据写入 JWT。

JWT 不仅可以用于认证,也可以用于交换信息。有效使用 JWT,可以降低服务器查询数据库的次数。

JWT 最大的优势是服务器不再需要存储Session,使得服务器认证鉴权业务可以方便扩展。但这也是 JWT 最大的缺点:由于服务器不需要存储 Session 状态,因此使用过程中无法废弃某个 Token 或者更改 Token 的权限。也就是说一旦 JWT 签发了,到期之前就会始终有效,除非服务器部署额外的逻辑。

JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,JWT的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证。

JWT 适合一次性的命令认证,颁发一个有效期极短的JWT,即使暴露了危险也很小由 于每次操作都会生成新的 JWT,因此也没必要保存 JWT,真正实现无状态。

为了减少盗用,JWT 不应该使用 HTTP 协议明码传输,要使用 HTTPS 协议传输。

参考资料:

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[前端鉴权知识学习]http://www.zyiz.net/tech/detail-125059.html


http://chatgpt.dhexx.cn/article/Sa6lfTum.shtml

相关文章

接口鉴权功能的实现

一、背景 随着系统的发展,单体应用逐渐演化成微服务架构。系统微服务化之后,若干个微服务之间会有调用。同个部门内实现的服务会被内部调用,一般风险是可控的。但是如果服务提供给别的部门使用之后,在不了解对方的使用场景&#…

JWT鉴权

文章目录 一、什么是JWT二、JWT能做什么三、JWT介绍以及和传统Session的区别1)基于传统的Session认证2)基于JWT认证 四、JWT的构成和认证流程五、JWT的优缺点 一、什么是JWT JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained …

API签名鉴权设计

鉴权作用 在实际的业务中,必然会存在和其他平台系统进行数据传输。这个时候出于对数据的保密要求,都会对接口(API)添加鉴权机制,识别调用方的真实身份,对未通过鉴权的请求不做任何业务处理,以帮…

ak和sk怎么认证 海康威视_aksk鉴权

简介 鉴权功能的位置处于基础服务的接入网关中。 1. 认证简介 本鉴权方案是在api层面上进行,通过使用Access Key/Secret Key加密的方法来对验证某个请求的调用者身份。 当接入网关接收到业务调用方的请求时,将使用相同的SK和同样的认证机制生成认证字符串,并与用户请求中包含…

Kafka鉴权

1.SecurityProtocol 参见官方介绍 如图第一个是无需加密,无需鉴权的 第二个是使用sasl鉴权,不加密 该参数需要在服务端进行配置,client端也需要进行相应的配置 2.sasl.mechanism 消息收发的机制,默认为PLAIN。具体介绍参见该文档…

后端认证鉴权

之前我们把redis缓存工具模块做好了、下面结合RBAC权限模型,我们来进行用户的认证鉴权设计。关于RBAC权限模型在之前的文章跟网上都有很多很详细的描述,这里就简单说一下、就是通过用户关联角色(多对多)、角色关联权限&#xff08…

Postman鉴权

Ok, 今天我们来学习 一下 鉴权 鉴权(authentication) 是指验证用户是否拥有访问系统的权利。传统的鉴权是通过密码来验证的。这种方式的前提是,每个获得密码的用户都已经被授权。在建立用户时,就为此用户分配一个密码,…

详解 http 鉴权

详解 http 鉴权 【总结分享】10种常用前后端鉴权方法,让你不再迷惘 🌟🌟🌟 前端开发登录鉴权方案完全梳理 🌟🌟🌟 实践出真知,聊聊 HTTP 鉴权那些事 注:此处主要讲的是…

文件服务器鉴权,服务鉴权

使用kmse实现服务的权限校验 通过一个简单的实例说明开发者如何通过kmse进行服务间的权限校验。 一、准备客户端和服务端两个demo 这里演示如何快速实践服务鉴权功能。假如现在有两个微服务 auth-client 和 auth-server,想实现 auth-client 调用 auth-server 时&…

前后端常见的几种鉴权方式

最近在重构公司以前产品的前端代码,摈弃了以前的session-cookie鉴权方式,采用token鉴权,忙里偷闲觉得有必要对几种常见的鉴权方式整理一下。 目前我们常用的鉴权有四种: HTTP Basic Authenticationsession-cookieToken 验证OAuth(开放授权)一.HTTP Basic Authentication 这…

鉴权的4种基本方法

一、基于服务器常出现的问题 Seesions: 每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开销也会不断增加。 可扩展性: 由于sessions存放在服务器内存中,伴随而来的是可…

什么是鉴权?一篇文章带你了解postman的多种方式

目录 一、什么是鉴权? 二、postman鉴权方式 一、什么是鉴权? 鉴权也就是身份认证,就是验证您是否有权限从服务器访问或操作相关数据。发送请求时,通常必须包含相应的检验参数以确保请求具有访问权限并返回所需数据。通俗的讲就…

10 分钟带你了解鉴权那些事

前言: 鉴权是自动化测试路上的拦路虎,相信大部分同学都深有体会,今天我们就讲一讲这个鉴权到底是怎么回事。 一、什么是鉴权,为什么要鉴权 鉴权:是指是指验证用户是否拥有访问系统的权利。为什么要鉴权:…

常见的鉴权方式简述

一、什么是鉴权,为什么要鉴权 鉴权:是指验证用户是否有访问系统的权利。 为什么要鉴权 :对用户进行鉴权,防止非法用户占用网络资源,非法用户接入网络,被骗取关键信息 二、鉴权方式 Basic Auth basic au…

笔记——什么是鉴权

前言 鉴权是自动化测试路上的拦路虎;故以此记录鉴权到底是怎么回事。 一、什么是鉴权,为什么要鉴权 鉴权:是指验证用户是否有访问系统的权利。为什么要鉴权 :对用户进行鉴权,防止非法用户占用网络资源,非…

ftok()函数解析

ftok 消息队列、信号灯、共享内存常用在Linux服务端编程的进程间通信环境中。而此三类编程函数在实际项目中都是用System V IPC函数实现的。System V IPC函数名称和说明如下表15-1所示。 表15-1 System V IPC函数 消息队列 信号灯 共享内存区 头文件 <sys/msg.h> …

ftok()函数的使用

在上一篇文章中&#xff0c;Mayuyu讲述了共享内存的原理以及使用方法。在创建共享内存之前&#xff0c;必须指定一个ID值&#xff0c;而这个ID值通常是通过现在要讲的ftok()函数得到。ftok()函数原型如下 其中参数fname是指定的文件名&#xff0c;这个文件必须是存在的而且可以…

linux ftok函数的使用

ftok API #include <sys/types.h> #include <sys/ipc.h> key_t ftok(const char *pathname, int proj_id); ftok根据路径名&#xff0c;提取文件信息&#xff0c;再根据这些文件信息及project ID合成key&#xff0c;该路径可以随便设置。该路径是必须存在的&#x…

ftok与fork

ftok函数编辑 系统建立IPC通讯 &#xff08; 消息队列、 信号量和 共享内存&#xff09; 时必须指定一个ID值。通常情况下&#xff0c;该id值通过ftok函数得到。 2ftok原型编辑 头文件 #include < sys/types.h> #include <sys/ipc.h> 函数原型&#xff1a; key_t f…

Linux下的ftok()函数

linux ftok&#xff08;&#xff09;函数 - 清清飞扬 - 博客园 (cnblogs.com) 系统建立IPC通讯&#xff08;如消息队列、共享内存时&#xff09;必须指定一个ID值。通常情况下&#xff0c;该id值通过ftok函数得到。 ftok原型如下&#xff1a; key_t ftok( char * fname, int i…