最近需要实现类似单点登录的功能。情况是这样的,最初在做网站A,做着做着,要做网站B了,要求与网站A完全分开作为两个应用,但用户数据要求与网站A保持一致,也要求用户在网站A登录后,转到网站B时不需要再登录。怎么样,标准的SSO吧。

查了一些资料,了解了不少原理。园子里的几个兄弟也写得很多了,比如:jillzhang 的 单点登陆(SSO)组件的设计与实现一 和亚历山大同志 的 手把手教你可复用SSO组件的设计(原理篇) ,看了之后,受益匪浅,对实现原理有了基本了解。但各种实现方案都相对复杂,也没找到成熟的组件化实现方案。我所碰到的问题看起来并不是那么的复杂,实在是不想深入钻研(懒人,呵呵),苦思半响不解,实然灵光一现,顿悟,于是有了以下方案,大家来探讨巧一下,拍拍砖头。

环境说明:
在同一台物理服务器上,运行iis和sql server。在iis上有网站A和网站B,在Sql Server上有数据库A(sitea_db),数据库B(siteb_db)和用户数据库(user_db)。这下知道标题中的特定的意思了吧,是够特定了吧。

方案说明:
网站A和网站B的用户数据都统一放在user_db中,验证逻辑可以独立,也可以集中,这无所谓了。其他的没有任何改变,只有当用户从网站A跳转到网站B时,SSO隆重登场,整个流程如下:
1. 网站A生成一个随机的唯一的票据,比如GUID就很不错,将当前用户和票据存到user_db中,然后redirect到网站B,并把票据作为参数。
2. 网站B接收到票据,到user_db中找到相关票据对应的用户并设为当前登录用户,并立即在user_db中删除该票据记录。

OK,大功告成,够简单吧!!

在安全性上我不是专家,我想到可能的问题是该票据要是被截获,就会导致安全问题了,看了别的文章,标准的SSO方案好象也有类似的问题。我的解决方案也类似,将该票据的有效时间设置得小一些,在我所描述的情况下,我想可以设置为2秒甚至更小一些。

以上方案只是初步设想,与大家分享,欢迎批评指正。

转载于:https://www.cnblogs.com/andywu/archive/2008/03/16/1108421.html

在特定情况下的简单SSO实现方案相关推荐

  1. php如何在特定情况下触发,php类知识点滴---魔术方法,系统在特定时机触发的方法...

    __get()获取私有或受保护属性时调用的方法 class coach { private $chairfit = "徐晓冬"; public function __constru ...

  2. Java的流读一行丢一行_java – 在少数特定情况下记录丢失的消息

    我正在使用 java.util.logging来完成我的应用程序的所有日志记录. 直到最近,我在没有任何特定配置的情况下使用日志工具.一切都按预期工作,所有日志都在控制台中可见(stderr) 现在, ...

  3. 【图论】已知度数列情况下的简单无向图的判断方法

    感谢评论区大佬@goodloveyourlove补充的判断度数列是否能构成无向树的方法与例子. 关于度数列是否能构成无向树的判断方法可以移步至评论区. ======================== ...

  4. 如何根据分页的当前页数查询数据_数据量很大的情况下,如何分页查询优化方案?...

    当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分页查询,也有很多种方法和优化的点.下面简单说一下我知道的一些方 ...

  5. c# 实现二进制文件读写、ini文件读写以及一些文件和目录的常用操作,在某些特定情况下会用到,如录波文件要保存.dat

    不说废话,直接上代码 还包含一些常用的目录和文件操作的函数,如获得文件大小,获得文件行数,获得文件时间,获得目录下所有的文件名称等等等

  6. 【 FPGA 】特定情况下消除不稳定态的方法

    不是没有方法,但方法也不多,最典型的就是使用格雷码. 消除不稳定态的原理 通过上篇博文:https://blog.csdn.net/Reborn_Lee/article/details/8443977 ...

  7. python初学 数据分叉情况下的函数递归

    对于python中的函数递归,其实用while和for循环可以等价的实现.平时较少用到,但是在某些特定情况下比较方便实现一些功能. 对于没有数据分叉的函数递归,比较简单.如: def cal(n):p ...

  8. linux下载软件说依赖关系不足,在依赖关系可以满足的情况下也会提示“依赖关系不满足”...

    问题 在某些特定情况下,deepin-deb-installer不能正确解决依赖关系. 虽然软件包的依赖很简单(这里只有一个wine),而且可以顺利被apt命令安装,但是deepin-deb-inst ...

  9. 在不同的库存情况下,亚马逊CPC广告的投放策略会有什么改变呢?

    说到开广告之于库存的意义,很多亚马逊卖家第一反应就是开广告可以处理库存,盘活库存,提升资金周转率,当你库存太多的时候,可以通过广告引流和低价甩掉库存:在不同的库存情况下,亚马逊CPC广告的投放策略会不 ...

最新文章

  1. 如何操作提升手机端网站的排名优化?
  2. 财务大数据比赛有python吗-【教改实验班简介】财务大数据分析班
  3. python xpath语法-Python Xpath语法
  4. 未来软件是什么样呢?数据库篇(转载)
  5. 启明云端分享| ESP32-C3智能写字板应用解决方案
  6. 发现dba_segments和dba_extents中统计段空间大小居然不一样
  7. Java的四种引用方式
  8. 菜鸟笔记 -- Chapter 6.4.2 详解继承
  9. U盘复制东西时显示:磁盘被写保护,请去掉写保护或使用另一张磁盘的解决方法。
  10. 【JavaWeb】如何优雅的实现第三方开放api接口签名(有状态/无状态)
  11. Ubuntu 最好用的CHM阅读器KchmViewer
  12. 白帽黑客获 5 万美元赏金!只因利用漏洞控制所有特斯拉汽车
  13. 百度Echarts设置markPoint展示样式
  14. 查看微信公众号的二维码
  15. 比Siri更厉害的个人助理Viv 能否一统江湖?
  16. Blender:导入obj渲染及导出图片+深度图+法向图
  17. TMB:肿瘤突变负荷简介
  18. python 中的File
  19. 锐浪报表(Grid++Report)实现动态图片链接
  20. 第二章:关系数据库 - 04735数据库系统原理 - 自考知识点

热门文章

  1. OpenCV3.3中K-Means聚类接口简介及使用
  2. vs2008部署问题
  3. 【linux】Valgrind工具集详解(八):Memcheck命令行参数详解
  4. word分散对齐调整宽度_Word中文字很难对齐?有了这4个方法,2秒可对齐Word中所有文字...
  5. 串口的偶校验位设置_详解UART串口
  6. laravel auth(api)-attempt 返回false_3分钟短文:Laravel命令行参数和可选项分不清?怎么可能...
  7. html流式布局怎么用,css 流式布局什么意思?
  8. python字典一键多值_python字典中如何一键多值的写入?
  9. HashSet中的add()方法( 一 )(详尽版)
  10. 一个客户机-服务器系统使用了卫星网络,客户机/服务器体系结构可用于局域网、广域网和WWW。这三种用途迥异的网络的一个共同特点是工作负 - 试题答案网问答...