欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

登录对比:cas(单点登录);oauth2(授权);单一登录的区别 casoauth2单一登录 

程序员文章站 2022-06-08 23:23:56
...

转载请注明出处:https://375287760.iteye.com/blog/2400976

浏览器访问是无状态的,判断是否登陆需服务器自定义实现,可保存在session中,或者保存在缓存中
每个浏览器会话都有一个唯一的sessionid,用于区别不同的会话

  1. cas(单点登录)
    现象:多个系统只需登录一次,无需重复登录
    原理:授权服务器,被授权客户端
    1、授权服务器(一个)保存了全局的一份session,客户端(多个)各自保存自己的session
    2、客户端登录时判断自己的session是否已登录,若未登录,则(告诉浏览器)重定向到授权服务器(参数带上自己的地址,用于回调)
    3、授权服务器判断全局的session是否已登录,若未登录则定向到登录页面,提示用户登录,登录成功后,授权服务器重定向到客户端(参数带上ticket【一个凭证号】)
    4、客户端收到ticket后,请求服务器获取用户信息
    5、服务器同意客户端授权后,服务端保存用户信息至全局session,客户端将用户保存至本地session
  2. oauth2(登录授权)
    现象:第三方系统访问主系统资源,用户无需将在主系统的账号告知第三方,只需通过主系统的授权,第三方就可使用主系统的资源(如:APP1需使用微信支付,微信支付会提示用户是否授权,用户授权后,APP1就可使用微信支付功能了)
    原理:主系统,授权系统(给主系统授权用的,也可以跟主系统是同一个系统),第三方系统
    1、第三方系统需要使用主系统的资源,第三方重定向到授权系统
    2、根据不同的授权方式,授权系统提示用户授权
    3、用户授权后,授权系统返回一个授权凭证(accessToken)给第三方系统【accessToken是有有效期的】
    4、第三方使用accessToken访问主系统资源【accessToken失效后,第三方需重新请求授权系统,以获取新的accessToken】
  3. 单一登录
    现象:同一系统,同一用户在同一时间内只能有一个会话(即一个用户只有一个在使用的浏览器)
    原理:
    1、把登录成功的用户放入session和缓存,缓存中格式:key:userID,value:sessionId
    2、用户访问资源时,用拦截器(或过滤器)拦截用户请求,先判断用户是否已登录(根据session判断),若用户未登录,则定向到登录页面提示用户登录
    3、若用户session已登录,根据用户userID取出缓存数据,判断当前浏览器的sessionId与缓存的是否一致,若一致,则继续访问
    4、若sessionId不一致,则将当期的session数据清空,用户登出,提示用户被踢出
  4. 这只是个人总结,有错误请指出