`

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

阅读更多

转载请注明出处: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. 这只是个人总结,有错误请指出
分享到:
评论
1 楼 lansezhixing123 2018-05-21  
总结的很好

相关推荐

Global site tag (gtag.js) - Google Analytics