如何实现单点登录

单系统登录

1. http无状态协议

在这里插入图片描述

http是无状态的协议,浏览器的每一次请求,服务器会独立处理,不与之前或之后的请求产生关联。这同时意味着,任何用户都能通过浏览去访问服务器资源,如果想保护服务器的某些资源必须限制浏览器的请求。响应合法请求,忽略非法请求。而要鉴别浏览器的请求就必须清除浏览器的请求状态,既然http无状态,那就然服务器和浏览器共同维护一个状态,这就是会话机制。

2. 会话机制

浏览器第一次请求服务器,服务器创建一个会话,并将此会话的id作为响应的一部分发送给浏览器,浏览器存储会话id,并在后续请求中带上会话id,服务器取得请求中的会话就知道是不是同一个用户了、在这里插入图片描述
这样后续请求就与第一次请求产生关联。服务器在内存中保存会话id。在浏览器端有两种方式,请求参数或者cookie,使用请求参数id作为每一个请求的参数,但是这样显然是不靠谱的,不可能让用户每次请求的时候还得取查询这个会话id加到请求里。所以得让浏览器自动发送会话id,所以就有了cookie,它是浏览器用来存储少量数据的一种机制。数据以"key/value"形式存储,浏览器发送http请求时自动附带cookie信息。
在tomcat会话机制中,浏览器可以看到一个叫JSESSIONID的cookie。

3. 登录状态

在第一次请求中,服务器拿到了用户名和密码,与数据库中的信息作对比,如果通过验证,则说明这个用户是合法的,就将会话标记位true表示已登录。用户再次访问时,tomcat在会话对象中查看登录状态。只有状态为true时才能访问。在这里插入图片描述

多系统的复杂性

web系统早已经从久远的单系统发展为如今的多系统组成的应用群,所以用户面对如此多的系统,不可能一个个登录,一个个注销。这个责任应该由服务器内部来承担,而不是用户,对用户而言要跟单系统登录一样,只登陆注销一次就好了。

单系统登录解决方案的核心是cookie,而cookie是有限制的,浏览器发送jttp请求时会自动携带与该域匹配的cookie而不是所有cookie。而且应用群各系统使用的技术要相同,共享cookie的方式无法实现跨语言平台,还有cookie本身是不安全的。

单点登录

概述
单点登录全称Single Sign On 简称为SSO,是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包含单点登录和单点注销两部分。

1. 登录

相比于单系统登录,sso需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登陆入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,令牌作为参数发送给各个子系统,子系统拿到令牌,可以借此创建局部会话,局部会话登录方式与单系统的方式相同。在这里插入图片描述

  1. 用户访问系统1的受保护资源,系统1发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数;
  2. sso认证中心发现用户为登录,将用户引致登录页面;
  3. 用户输入用户名和密码提交登录申请;
  4. sso认证中心校验用户信息,创建用户与sso认证中心的会话,称为全局会话,同时创建授权令牌;
  5. sso认证中心带着授权令牌跳转到最初的请求地址系统1;
  6. 系统1拿到令牌,去sso校验令牌是否有效;
  7. sso认证中心检验令牌有效,并注册系统1;
  8. 系统1使用该令牌创建与用户的会话,称为局部会话,返回受保护的资源;
  9. 用户访问系统2的受保护资源;
  10. 系统2发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数;
  11. sso认证中心发现用户已登录,返回跳转至系统2,并附带授权令牌;
  12. 系统2拿到授权令牌去sso认证中心去检验令牌是否有效;
  13. sso返回有效,注册系统2;
  14. 系统2使用该令牌创建与用户的局部会话,返回受保护资源。

2. 注销

在这里插入图片描述

  1. 用户向系统1发起注销请求;
  2. 系统1根据用户与系统1建立的局部会话id拿到 令牌,向sso认证中心发起注销请求;
  3. sso认证中心校验令牌有效,销毁全局会话,同事取出所有用此令牌注册的系统地址;
  4. sso认证中心向所有注册系统发起注销请求;
  5. 各注册系统接收sso认证中心的注销请求,销毁各自的局部会话
  6. sso认证中心引导用户至登录页面。

四、 部署图

单点登录涉及sso认证中心与众子系统,子系统与sso认证中心需要通信以交换令牌、校验令牌及发起注销请求,因而子系统必须集成sso的客户端,sso认证中心则是sso服务端,整个单点登录过程实质上是sso客户端与服务端通信的过程。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值