热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

单点登录(SSO)如何实现?

现在有子系统A,B现在想要将其登录打通有两种方案1session共享这个方案效率太低,极高耦合度,仅仅适用于单子系统内部使用2使用统一授信服务器S比如有一个每一个系统都需要的统一的opeid,子系统发现没有open...
现在有子系统
A,B
现在想要将其登录打通
有两种方案
1 session共享
这个方案效率太低,极高耦合度,仅仅适用于单子系统内部使用
2 使用统一授信服务器S
比如有一个每一个系统都需要的统一的ope id,子系统发现没有openid或者openid不对时重定向到授信服务器S进行登录,S提供一个openid到COOKIE,让各个子系统访问。
子系统访问有两种方案(我认为)
主动式:每一次用户访问时向S检测openid是否正确(就像单系统登录向本地session查询一样)。但是问题就是这种方案太慢,每一次都需要向S查询一下。另外可以缓存一下信息到本地,但是这样就没有办法同步登出了。。QAQ
被动式:S在登录后,给每个系统 用户已登录 的消息,登出后给每个系统 用户已登出 的消息。但是,这样耦合度太高,另外如果服务器太多,岂不是崩了。。
该如何权衡?
我希望能够主动式,然后缓存,登出时清楚openid,也就是说,子系统无法判断缓存,用户对应关系而实现登出,这样是否有风险?
另外不知道自己理解的openid是不是这个意思,欢迎拍砖。。
另外我的步骤中少需要考虑的东西吗?
大家有什么好建议吗?
啊,大脑好乱。。

回复内容:

现在有子系统
A,B
现在想要将其登录打通
有两种方案
1 session共享
这个方案效率太低,极高耦合度,仅仅适用于单子系统内部使用
2 使用统一授信服务器S
比如有一个每一个系统都需要的统一的ope id,子系统发现没有openid或者openid不对时重定向到授信服务器S进行登录,S提供一个openid到COOKIE,让各个子系统访问。
子系统访问有两种方案(我认为)
主动式:每一次用户访问时向S检测openid是否正确(就像单系统登录向本地session查询一样)。但是问题就是这种方案太慢,每一次都需要向S查询一下。另外可以缓存一下信息到本地,但是这样就没有办法同步登出了。。QAQ
被动式:S在登录后,给每个系统 用户已登录 的消息,登出后给每个系统 用户已登出 的消息。但是,这样耦合度太高,另外如果服务器太多,岂不是崩了。。
该如何权衡?
我希望能够主动式,然后缓存,登出时清楚openid,也就是说,子系统无法判断缓存,用户对应关系而实现登出,这样是否有风险?
另外不知道自己理解的openid是不是这个意思,欢迎拍砖。。
另外我的步骤中少需要考虑的东西吗?
大家有什么好建议吗?
啊,大脑好乱。。

单点登录一般不采用OpenId的概念,OpenId一般是外部验证才采用的。单点登录一般从登录系统登录并在登录系统域写身份 COOKIE 后,会跳转到其他系统的一个回调地址,带上 Ticket 参数,Ticket 是带有有限期的验证串,其他系统获得 Ticket 后从后台向登录系统验证 Ticket ,如果成功,则写入当前域的 COOKIE 和其他的身份信息。

关于登录后验证(主要是登出检查)这块,大多是有单点登录的网站采用的是你的第二种思路,也就是向所有系统发出登出信号,这个可以在登出后在用户端用 ajax 静默调用,一次调用多个也不会产生较大的影响。

谢谢关注,已经找到方法了,教程如下:
http://www.imooc.com/wap/article?article_id=3558

推荐阅读
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了Java后台Jsonp处理方法及其应用场景。首先解释了Jsonp是一个非官方的协议,它允许在服务器端通过Script tags返回至客户端,并通过javascript callback的形式实现跨域访问。然后介绍了JSON系统开发方法,它是一种面向数据结构的分析和设计方法,以活动为中心,将一连串的活动顺序组合成一个完整的工作进程。接着给出了一个客户端示例代码,使用了jQuery的ajax方法请求一个Jsonp数据。 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • Allegro总结:1.防焊层(SolderMask):又称绿油层,PCB非布线层,用于制成丝网印板,将不需要焊接的地方涂上防焊剂.在防焊层上预留的焊盘大小要比实际的焊盘大一些,其差值一般 ... [详细]
  • 前言:关于跨域CORS1.没有跨域时,ajax默认是带cookie的2.跨域时,两种解决方案:1)服务器端在filter中配置详情:http:blog.csdn.netwzl002 ... [详细]
  • 在Kubernetes上部署JupyterHub的步骤和实验依赖
    本文介绍了在Kubernetes上部署JupyterHub的步骤和实验所需的依赖,包括安装Docker和K8s,使用kubeadm进行安装,以及更新下载的镜像等。 ... [详细]
  • 从零基础到精通的前台学习路线
    随着互联网的发展,前台开发工程师成为市场上非常抢手的人才。本文介绍了从零基础到精通前台开发的学习路线,包括学习HTML、CSS、JavaScript等基础知识和常用工具的使用。通过循序渐进的学习,可以掌握前台开发的基本技能,并有能力找到一份月薪8000以上的工作。 ... [详细]
  • 本文介绍了使用FormData对象上传文件同时附带其他参数的方法。通过创建一个表单,将文件和参数添加到FormData对象中,然后使用ajax发送POST请求进行文件上传。在发送请求时,需要设置processData为false,告诉jquery不要处理发送的数据;同时设置contentType为false,告诉jquery不要设置content-Type请求头。 ... [详细]
  • Vue基础一、什么是Vue1.1概念Vue(读音vjuː,类似于view)是一套用于构建用户界面的渐进式JavaScript框架,与其它大型框架不 ... [详细]
  • 查询单个functionquery(id){$.ajax({url:smallproductServlet,async:true,type:POST,data:{typ ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • ASP.NET&Spring.NET&NHibernate最佳实践(五)——第3章人事子系统(2)
    3.4.人事子系统服务层(Service)部门服务接口(IDeptService.cs)usingSystem;usingGuushuuse.SalaryPrj. ... [详细]
  • Python入门后,想要从事自由职业可以做哪方面工作?1.爬虫很多人入门Python的必修课之一就是web开发和爬虫。但是这两项想要赚钱的话 ... [详细]
  • 一、Struts2是一个基于MVC设计模式的Web应用框架在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts2优点1、实现 ... [详细]
author-avatar
卢启红
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有