【登录方案】用户单点登录

一、项目需求

1.1 如何限制用户只能操作自己的数据?

在微服务项目中,由于用户往往需要通过网关访问多个微服务,如登录需要访问用户微服务,商品浏览需要访问商品微服务,下单需要访问订单微服务,支付需要访问支付微服务。但如何防止用户操作其他用户的数据,这就需要在各个微服务中增加授权认证。每个服务都要认证用户的身份,身份认证成功后,需要识别用户的角色然后授权访问对应的功能。

 

1.2 名词解释

1.2.1 身份认证

用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问。常见的用户身份认证表现形式有:用户名密码登录、指纹打卡等方式。即校验用户账号密码是否正确。

 

1.2.2 用户授权

用户认证通过后去访问系统的资源,系统会判断用户是否拥有访问资源的权限,只允许访问有权限的系统资源,没有权限的资源将无法访问,这个过程叫用户授权

 

1.3 单点登录SSO

1.3.1 概念

用户访问的项目中,若有多个微服务需要识别用户登录情况,如果用户访问每个微服务都要登录一次就太麻烦了,为了提高用户的体验,需要实现让用户在一个系统中登录,其他任意受信任的系统都可以访问,这个功能就叫单点登录

单点登录(Single Sign On) 就是为了解决这个问题,它的定义是:

在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统

 

1.3.2 单点登录和单一登录的区别

单一登录:指同一个账号在同一时间内只能有一个会话存在,即账号A在手机上登录着,这时候在电脑上登录这个账号,就会让手机上的账号强制下线。

单设备登录:指相同的设备中,同一个账号只能有一个会话存在。常见的设备分为:安卓手机、iOS手机、pc端以及web端。

解决方案:

常见的解决方案为 设置 session,并设置过期时间。当用户每次登陆时都会更新这个 session,每次用户请求时都会检查请求中携带的 session 是否正确,若不正确则返回错误,前端强制踢出。

 

二、单点登录方案

2.1 设计模型

在分布式系统中要实现单点登录,通常将认证系统单独抽取出来,并将用户身份信息存储在单独的存储介质中(如 Mysql、Redis)中,考虑性能,通常存储在 Redis 中

  

2.2 特点

  • 认证系统为独立的系统
  • 其他系统通过 http 或其他协议与认证系统通信,完成用户认证
  • 用户身份信息存储在 Redis 集群中

 

2.3 常用技术

  • Apache Shiro
  • CAS
  • Spring security CAS
  • OAuth 2.0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值