#项目总结一#SSO多系统单点登录

一、项目需求

  系统A 中用IFRAME嵌入系统B,

  1.需要做SESSION共享,实现免登录效果;

  2.系统B中做的操作,需要触发系统A,以免系统A的SESSION超时过期;

  3.系统B填好数据后,CALL系统A的API,执行系统A帐户注册操作

 

二、实现思路

  问题1.

  1. 系统A的登录是通过SSO Server实现的,SSO Server验证并登录之后,返回TOKEN给系统A,而系统A拿此TOKEN去CALL SSO Server并取回登录的帐户信息(如UID)。 当系统B第一次通过SSO 服务器去验证时,发现此会话已经登录,返回TOKEN,紧接着第二次CALL SSO,传进TOKEN取回登录的帐户信息。(注1:该TOKEN会有效时间,如三分钟)(注2:此时SSO中会记录此TOKEN下,含有两个系统A和B的记录,以便登录注销时一同注销)。 以上为一般的SSO流程,原理是让此浏览器和SSO服务器建立会话登录 ,即SESSIONID。
  2. 而目前公司现有做法是,系统B拿此TOKEN去向系统A做校验并取帐户信息,这种做法有风险,因为此浏览器只是和SSO 服务器有做会话登录,通过浏览器传入的TOKEN和服务器中SESSIONID对应的TOKEN比对和校验是有效的,而系统B和系统A是没有这种会话登录 ,换言之就是没有SESSIONID来做匹配,所以有可能其他电脑复制此TOKEN去向系统A做请求,这种欺骗行为会成功拿到帐户信息。 
  3. 改进方法:系统B不拿此TOKEN向系统A请求,而改向SSO请求并取到帐户信息。(注:如果此系统B由于其他原因,如防火墙设置等,无法访问SSO系统,则只能通过系统A,这种情况下,便要求系统B提交的信息不仅包括TOKEN,还需要获取到浏览器中的SESSIONID ?)

 

  问题2.

  1.系统B的任何操作,都会去CALL 系统A的API,以此让系统A的SESSION有效期得到同步

 

  问题3.

  个人信息,重要信息(如密码)等,由系统B向系统A发送请求的时候,需要做加密处理。加密可以通过非对称加密,即是通过公钥进行加密,发送到服务器,再用私钥进行解密,通过这种方式,便可以保证数据在传输的过程中不受盗取。

  1. 系统B向SSO系统请求,并取到一个公钥和随机数;
  2. 系统B将数据通过此公钥进行加密,然后CALL系统A的接口,传入此加密的数据作为参数,系统A会将此加密数据再发给SSO系统
  3. SSO系统根据步骤1产生的公钥和随机数,找到相应的请求并通过私钥对数据进行解密,实现注册操作。

 

SSO相关参考文章:

http://www.cnblogs.com/ywlaker/p/6113927.html

 

posted @ 2017-08-23 16:33  withoutaword  阅读(680)  评论(0编辑  收藏  举报