zoukankan      html  css  js  c++  java
  • #项目总结一#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

  • 相关阅读:
    20170419数据结构
    20170418 random函数和range函数
    20170418 sum函数、
    20170417嵌套循环
    20170417循环(loop)
    linux 输入输出重定向
    cut 命令-截取文件中指定内容
    read 命令-从键盘读取变量的值
    xargs-命令
    find 在目录中查找文件
  • 原文地址:https://www.cnblogs.com/withoutaword/p/7418862.html
Copyright © 2011-2022 走看看