尚融宝17-用户身份认证的三种模式

目录

1、单一服务器模式

2、SSO(Single Sign On)模式

3、Token模式


1、单一服务器模式

即只有一个服务器,用户通过输入账户和密码,提交表单后服务器拿到前端发送过来的数据查询数据库是否存在该用户,其一般流程如下:

  1. 用户向服务器发送用户名和密码。
  2. 验证服务器后,相关数据(如用户名,用户角色等)将保存在当前会话(session)中。
  3. 服务器向用户返回session_id,session信息都会写入到用户的Cookie。
  4. 用户的每个后续请求都将通过在Cookie中取出session_id传给服务器。
  5. 服务器收到session_id并对比之前保存的数据,确认用户的身份。

缺点:

  • 单点性能压力,无法扩展。
  • 分布式架构中,需要session共享方案,session共享方案存在性能瓶颈。

比如,有服务器A和服务器B,此时用户先访问服务器A后被提示登录,那么用户登录后cookie会记录与服务器A对应的sessionId,此时用户再去访问同个微服务的不同应用,即服务器B。此时因为服务器A和服务器B是独立的,sessionId并不共享,所以用户又被要求登录一次。

session共享方案:
session广播:性能瓶颈,不推荐
redis代替session:推荐,性能高,即将sessionId等可以识别用户登录的信息存放到redis,可以设置对应的过期时间,当用户访问对应的服务器就去redis中获取相应的的信息。

2、SSO(Single Sign On)模式

分布式,SSO(single sign on)模式:单点登录英文全称Single Sign On,简称就是SSO。它的解释是:在多个应用系统中,只需要登录一次,就可以访问其他相互信任的应用系统。

  • 如图所示,图中有3个系统,分别是业务A、业务B、和SSO。
  • 业务A、业务B没有登录模块。
  • 而SSO只有登录模块,没有其他的业务模块。

一般过程如下:

  1. 当业务A、业务B需要登录时,将跳到SSO系统。
  2. SSO从用户信息数据库中获取用户信息并校验用户信息,SSO系统完成登录。
  3. 然后将用户信息存入缓存(例如redis)。
  4. 当用户访问业务A或业务B,需要判断用户是否登录时,将跳转到SSO系统中进行用户身份验证,SSO判断缓存中是否存在用户身份信息。
  5. 这样,只要其中一个系统完成登录,其他的应用系统也就随之登录了。这就是单点登录(SSO)的定义。

优点 :  

用户身份信息独立管理,更好的分布式管理。可以自己扩展安全策略

缺点:

认证服务器访问压力较大。每次访问服务都需要跳转到SSO服务进行验证登录。

3、Token模式

  1. token的引入:token是在客户端频繁向服务器端请求数据,服务器端频繁的去数据库查询用户名和密码并进行对比。由此,token出现了。
  2. token的定义:token是服务器端生成的一串字符串,作为客户端请求的一个令牌,当第一次登录后,服务器生成一个token并返回给客户端,客户端带着这个token前来发送请求,无需带上用户名和密码。
  3. 使用token的目的:token的目的是为了减轻服务器的压力,减少频繁的查询数据库,使得服务器更加健壮。
  4. token的产生:token是在服务器端产生的,如果前端使用用户名/密码向服务器端请求认证,服务器端认证成功后,那么在服务端会返回token给前端,前端可以在每次请求的时候带上token表明自己携带用户。

客户端将用户名和密码提交道授权服务器进行验证,验证通过后会返回一个token存放在客户端,客户端可以通过token去访问其他的服务器,就不需要像SSO模式一样每次访问SSO服务进行认证

优点:

  • 无状态: token是无状态(即不将用户信息存在服务器或 Session 中),session是有状态的
  • 基于标准化:你的API可以采用标准化的 JSON Web Token (JWT)

缺点:

  • 占用带宽
  • 无法在服务器端销毁,因为token是存放在客户端的
QueryWrapper是MyBatis-Plus框架中的一个查询条件封装类,用于构建复杂的查询条件。它可以方便地通过链式调用的方式添加多个条件。根据给出的引用内容,QueryWrapper可以通过in、le、orderByDesc、orderByAsc等方法来实现多条件查询。 比如,可以使用queryWrapper.in("id", 1, 2, 3)方法来查询id为1、2、3的记录;使用queryWrapper.le("id", 3)方法来查询id小于等于3的记录。 此外,QueryWrapper还可以实现多条件的排序。比如,可以使用queryWrapper.orderByDesc("age").orderByAsc("id")方法来按照年龄降序排序,如果年龄相同则按照id升序排序。 综上所述,QueryWrapper可以通过多个方法的组合来实现多条件查询,包括in、le、orderByDesc、orderByAsc等方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [尚融宝04-mybatis-plus插件和条件构造器](https://blog.csdn.net/m0_62946761/article/details/129614633)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Mybatis-plus条件构造器各种用法(三)](https://blog.csdn.net/slxysyka/article/details/122569373)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zoeil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值