SSO单点登录的发展由来以及实现原理

单点登录以及权限,在很早之前都有写过,不过都比较简单,今天就具体说一下,以及下一步要做的

1、web单系统应用

早期我们开发web应用都是所有的包放在一起打成一个war包放入tomcat容器来运行的,所有的功能,所有的业务,后台管理,门户界面,都是由这一个war来支持的,这样的单应用,也称之为巨石应用,因为十分不好扩展和拆分。

在巨石应用下,用户的登录以及权限就显得十分简单,用户登录成功后,把相关信息放入会话中,HTTP维护这个会话,再每次用户请求服务器的时候来验证这个会话即可,大致可以用下图来表示:

 如上图,这个会话就是session,维护了用户状态,也就是所谓的HTTP有状态协议,我们经常可以在浏览器中看到JSESSIONID,这个就是用来维持这个关系的key

这样,每次请求的时候只需要用拦截器来拦截当前用户的登录状态以及授权状态即可。

如果引入集群的概念,这个单应用可以分别部署在3台tomcat上,使用nginx来实现反向代理, 此时,这个session就无法在这3台tomcat上共享,用户信息会丢失(这里不考虑粘性和非粘性的session,我们不推荐做)

2、多应用构建的分布式集群系统

从巨石应用发展至今,我们有SOA,有微服务,其道理都是一样的,都是进行了业务拆分来分解为多个系统,多个系统完全解耦,可以分别部署在不同的服务器上,项目之间通过rpc或者restful来实现相互通信,举个栗子:

order.abc.com

cart.abc.com

service.abc.com

有这么3个系统,部署在不同的二级域名下,那么用户每次登陆不同的系统是不是都要登录呢?这样是不合理的,我们不能因为系统的复杂度使得用户也变得复杂,对于用户来说,一套产品就是一个完整的应用。登录一次即可,没有必要多次登录。

按照之前所说的session就不适用了,在这个地方我们就引入了单点登录,保持用户与服务端之间的无状态协议,生成token,使用token这个令牌穿梭在各个系统。

那么这个token放在浏览器cookie即可,失效时间需要和redis的expire一致,根据需求我们可以实现用户登录一次就可以在任何系统中使用,其次用户账户在别的地方登录后,上一个用户则被挤出。

(需要注意的是,这个cookie作为第一方cookie需要对二级域名进行设置,如果要跨域的话需要设置第三方cookie或者使用JWT来做,这个就不多说了)

 

3、单点登录SSO(Single Sign On)

对于分布式系统来说,我们需要sso这样一个用于单点登录的系统,可以独立部署在一个web服务器内,比如域名为 login.abc.com,其他所有web服务上的登录都可以通过这个sso来登录,app也可以调用登录

如果,所有的token都由sso来管理,这个token在浏览器可以存储在第一方cookie或者第三方都行,在ios或者安卓上也能够保持,每次访问服务的时候放入headers中,让拦截器进行验证即可。同时,这个token也可以扩展用来做权限。

 

4、手机端的单点登录

这个不难理解,就像微信那样,同一个用户只能在同一个手机端上登录,这个是用token+缓存就能实现,套用上面所说的拦截器,可以不需要写很多代码就能实现。

 

5、代码实现以及部署

关于这个我会在这段时间抽空写个简单小项目放在github上开源。

 

时间: 2024-11-01 03:59:04

SSO单点登录的发展由来以及实现原理的相关文章

CAS实现SSO单点登录原理

一.不落俗套的开始 1.背景介绍 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. CAS框架:CAS(Central Authentication Service)是实现SSO单点登录的框架. 2.盗一张学习CAS绝大多都看过的图以及执行部分分析 注:已分不清原创,此处就不给出地址了. 从结构上看,CAS包含两个部分:CAS Server 和CAS Client需要独立部署,主要负责对用户的认证工作:CAS C

cas-CAS SSO 单点登录时报错

问题描述 CAS SSO 单点登录时报错 java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:407) org.jasig.cas.client.validation.AbstractCa

SSO单点登录系统接入的例子

简单讲一下 SSO 单点登录系统的接入的原理,前提是系统本身有完善的用户认证功能,即基本的用户登录功能,那做起来就很方便了. SSO 登录请求接口往往是接口加上一个回调地址,访问这个地址会跳转到回调地址并带上一个 ticket 参数,拿着这个 ticket 参数再请求接口可以获取到用户信息,如果存在用户则自动登录,不存在就新增用户并登录. 比如这个 SSO 模型实现了两个方法,一个是获取接口 url,一个是凭 ticket 获取用户信息: PHP interface SSOLogin {    

SSO单点登录,AD域,CS

问题描述 各位大神好:请大家介绍一款开源的SSO单点登录系统,要求支持AD域控,支持C/S.,B/S网上看到的casopensso没找到支持AD,c/s的资料. 解决方案 解决方案二:楼主请参考解决方案三:只用过cas--唉,眼界太窄

php的sso单点登录实现方法_php技巧

本文实例讲述了php的sso单点登录实现方法.分享给大家供大家参考.具体分析如下: 这里详细讲到了几点: 1.点击登录跳转到SSO登录页面并带上当前应用的callback地址 2.登录成功后生成COOKIE并将COOKIE传给callback地址 3.callback地址接收SSO的COOKIE并设置在当前域下再跳回到应用1即完成登录 4.再在应用程序需要登录的地方嵌入一个iframe用来实时检测登录状态,代码如下: index.php 应用程序页面: 复制代码 代码如下: <?php  hea

SSO单点登录的PHP实现方法(Laravel框架)_php实例

Laravel是一套简洁.优雅的PHP Web开发框架(PHP Web Framework).它可以让你从面条一样杂乱的代码中解脱出来:它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁.富于表达力. 简单说一下我的逻辑,我也不知道我理解sso对不对. 假如三个站点 a.baidu.com b.baidu.com c.baidu.com a.baidu.com 作为验证用户登录账户. b和c作为客户端(子系统). b和c需要登录的时候跳转到a,并且携带参数source指明登陆后跳转的链接

SSO单点登录解决方案

1 什么是单点登陆 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务 整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 较大的企业内部,一般都有很多的业务支持系统为其提供相应的管理和IT服务.例如 财务系统为财务人员提供财务的管理.计算和报表服务:人事系统为人事部门 提供全公司人员的维护服 务:各种业务系统为公司内部不同的业务提供不同的服务等等.这些系统的目的都是让计算机来 进行复 杂繁琐的计算工作,来替代

SSO单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas协议终极分析

这次的收获是把PPT也深入研究了一番... 上图:一会上原理分析:(本篇不涵盖cas代理认证模式,代理目前还没用到.) 文中所有资料下载地址:在文章中最下方. 1)PPT流程图: 一.用户第一次访问web1应用. ps:上图少画了一条线,那一条线,应该再返回来一条,然后再到server端,画少了一步...谢谢提醒.而且,重定向肯定是从浏览器过去的.我写的不严谨,画的比较通俗了...因该像下面这张图一样就ok了!!PPT自己下载下来修改吧,我就不改了. 二.用户第一次访问web2应用. 困扰了好久

细说SSO单点登录(转)

OAuth2.0:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-security.html#boot-features-security-oauth2-resource-serverhttp://projects.spring.io/spring-security-oauth/docs/oauth2.html 什么是SSO? 如果你已知道,请略过本节! SSO核心意义就一句话:一处登录,处