登录鉴权

article/2025/9/19 5:58:23

注册登录鉴权

1.1.用户注册

前台需要给我们传递用户名、密码、手机号、手机验证码。验证用户前台传过来的数据是否符合规范,我们使用的Hibernate Validator框架实现的服务端表单校验。短信验证码这块,我们采用的阿里的大于短信接口来做的,我们单独搭建了一个短信微服务,发送的短信请求通过MQ消息由短信微服务消费,进行短信发送。密码我们使用的是Spring提供的BCryptPasswordEncoder加密算法,分成加密和验证两个过程:

  • 加密:算法会对明文密码使用UUID随机生成一个salt,使用salt结合密码来加密,得到最终的密文。

  • 验证密码:需要先拿到加密后的密码和要验证的密码,根据已加密的密码来推测出salt,然后利用相同的算法和salt对要验证码的密码加密,与已加密的密码对比即可。

短信验证码的有效期为30分钟,为了验证短信验证码的时效性,我们保存到了redis中,手机号作为key,验证码作为value,设置有效期为30分钟。另外为了防止恶意攻击,我们限制一个手机号1分钟之内只能发送一次验证码,这个也是通过redis来实现的,手机号拼接"_yes"为key,验证码为value,设置有效期为1分钟。为了防止机器恶意调用验证码接口,我们这个地方使用图形验证码来进行限制。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R9Wh8WaR-1608619936313)(assets\6.png)]

1.2.用户登录

使用JWT+RSA加密技术实现了无状态登录。我们单独搭建了一个校验微服务来进行校验,验证用户名和密码的话需要通过feign组件来调用用户魏服务来进行查询,另外的话,我们使用JWT+RSA加密生成一个token返回给前台,写到cookie中。

(img-8LbV4Usa-1608619936317)(assets\1.png)]

1.3.校验登录

在页面created生命周期函数中就调用校验登录的接口。接口的主要逻辑为:

  • 去redis中验证token是否存在redis中,如果存在说明,此token失效了,返回401
  • 取cookie中的token信息,使用公钥进行解密操作,获取用户信息进行返回
  • 如果前两步正确无误,但是token的有效期小于15分钟则进行token的续签操作,即重新生成一个token,写入cookie中即可

(img-g6v3vwaX-1608619936318)(assets\2.png)]

1.4.登出操作

  • 把JWT存入黑名单,就是把token放入redis中,设置一个过期时间(token的有效剩余时间)
  • 删除客户端cookie

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RaSRvF8Z-1608619936320)(assets\3.png)]

1.5.网关登录控制

  • 1)获取用户的登录凭证jwt
  • 2)解析jwt,获取用户身份
    • 如果解析失败,证明没有登录,返回401
    • 如果解析成功,继续向下
  • 3)根据身份,查询用户权限信息
  • 4)获取当前请求资源(微服务接口路径)
  • 5)判断是否有访问资源的权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fc0zeBLC-1608619936322)(assets\4.png)]

2.JWT的3W1H

2.1.是什么(what)?

JWT,全称是Json Web Token,是JSON风格轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权;JWT包含三部分数据:①Header头部:声明这是JWT以及选用的签名算法;②payLoad:载荷,就是有效数据,我们存放了jwt的id、用户信息、过期时间;③Signature:签名,是整个数据的认证信息。一般根据前两步的数据,再加上服务的的密钥(secret)(不要泄漏,最好周期性更换),通过加密算法生成。用于验证整个数据完整和可靠性。

2.2.为什么(why)?

我们使用的springCloud搭建的微服务架构,想使用JWT来做无状态登录,使用JWT+RSA加密算法来生成token,客户端保存token信息,服务器端不再保存用户登录状态。

2.3.在哪用(where)?

一般用于授权和身份认证。

2.4.怎么用(how)?

(img-FmYAqHNl-1608619936323)(assets\5.png)]

  • 引入maven的依赖
  • 创建一个JWT的工具类
    • 使用私钥加密token
    • 公钥解密token
    • 获取token中的User信息
    • 获取token中的载荷信息

3.RSA的3W1H

3.1.是什么?

1977年,三位数学家Rivest、Shamir 和 Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字缩写:RSA。是一种非对称加密算法。

3.2.为什么?

加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密),加密技术的要点是加密算法。用RSA的目的就是对数据进行加密,防止信息泄露。

3.3.在哪用?

用于对不能明文传输或者明文保存的信息进行加解密。

3.4.怎么用?

基本原理:同时生成两把密钥:私钥和公钥,私钥隐秘保存,公钥可以下发给信任客户端

  • 私钥加密,持有私钥或公钥才可以解密
  • 公钥加密,持有私钥才可解密

4.cookie被禁用的解决方案

一.在URL后面手动拼接sessionid

经常被使用的一种技术叫做URL重写,就是把session id直接附加在URL路径的后面。还有一种技术叫做表单隐藏字段。就是服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器。

二.使用响应对象HttpServletRequest中的encodeURL(String path)方法实现jsessionid的自动拼接

5.如何解决cookie被盗用问题?

答:cookie被盗用的可能性主要包括下面几种:

  • XSS攻击:这个可以再前端页面渲染时对 数据做安全处理即可,而且我们的cookie使用了Httponly为true,可以防止JS脚本的攻击。
  • CSRF攻击:
    • 我们严格遵循了Rest风格,CSRF只能发起Get请求,不会对服务端造成损失,可以有效防止CSRF攻击
    • 利用Referer头,防盗链
  • 抓包,获取用户cookie:我们采用了HTTPS协议通信,无法获取请求的任何数据
  • 请求重放攻击:对于普通用户的请求没有对请求重放做防御,而是对部分业务做好了幂等处理。运行管理系统中会对token添加随机码,认证token一次有效,来预防请求重放攻击。
    我们采用了HTTPS协议通信,无法获取请求的任何数据
  • 请求重放攻击:对于普通用户的请求没有对请求重放做防御,而是对部分业务做好了幂等处理。运行管理系统中会对token添加随机码,认证token一次有效,来预防请求重放攻击。
  • 用户电脑中毒:这个无法防范。控制自己

http://chatgpt.dhexx.cn/article/6NpULnSI.shtml

相关文章

登陆鉴权方案设计

一、概述 登陆和认证是什么?都是在鉴别用户的身份。如何鉴定识别出这是哪个用户?或者说,有什么方式只有用户自己知道(够安全),又能说出这是他自己?于是就有了"用户名密码"、"用…

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

1、Cookie 指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。 HTTP是一种无状态传输协议,它不能以状态来区分和管理请求和响应。也就是说,服务器单从网络连接上无从知道客户身份。于是给客户端发布一个通行证—cook…

接口鉴权功能的实现

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

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…