一个SSO单点登录实现

看了一遍,基本了解了其原理。要点:
1、首次登陆后的免密登录(如10分钟内)需要服务器识别特定客户端,这需要通过所谓会话(session)机制来实现,具体方式是服务器要能够识别客户端在请求中放入的特定会话标识。对于单个域名来说(如xxx.com)基于cookie的会话保持方式是可以实现的,即服务器查看HTTP请求中的cookie是否正确、是否过期;但如果要实现单点登录场景,往往多个服务器域名不一样,就无法使用同一个cookie来访问不同的域名了(cookie只能针对单个域名),这个时候需要采用另外一种机制来在多服务器之间传递会话信息,即令牌token。
2、单点登录实现令牌的原理简单来说主要有以下几个方面:
1)系统组成:需要有单点登录的认证中心sso-server和在各个服务器上与sso-server通信来验证令牌的sso-client。
2)登录流程:首次客户端浏览器的访问所有系统都会跳转到认证中心进行登录认证,成功或会获取两个东西,一个是认证中心的全局会话id(通常在cookie中的sid字段),另一个是url中的访问令牌,令牌形式往往是URL中?后的一串字符,如http://xxx.com/?ticket=xxx。认证中心在返回令牌后让客户端重定向至需要访问的服务器,服务器收到请求后会向认证中心验证令牌,成功以后即可基于该令牌建立和客户端的会话sessionid,后续与同一服务器会话均使用sessionid。
3)单点登录:当客户端在首次登录成功后访问其它服务器,流程都是一样的。即先跳转至认证中心,认证中心发现已经有sessionid,则返回待令牌的URL,客户端浏览器按URL跳转至目标服务器,目标服务器与认证中心进行令牌验证,成功后即与浏览器建立会话。
4)注销:当有某一台服务器注销时,服务器会认证中心请求注销,认证中心保存了一个客户端登录的服务器清单,会向所有服务器发送注销请求。

上述方案的好处是:客户端、服务器和认证中心之间完全通过HTTP协议中的cookie机制和302重定向机制即可实现sessionid的校验和ticket的传递。因此只需要基于tomcat等servelet容器来开发就可以了。

其中,认证中心如何知道认证完成后跳转回哪个系统的地址呢?因为认证前该系统就在重定向到认证中心的URL中包含了自己的信息(如域名)。

单点登录原理及实现参考:https://blog.csdn.net/javaloveiphone/article/details/52439613
cookie格式:https://blog.csdn.net/qq_35574888/article/details/80959449
session实现方式:https://blog.csdn.net/woshinannan741/article/details/72597969

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qq_36718740

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

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

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

打赏作者

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

抵扣说明:

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

余额充值