如何设计一个单点登录系统(1)?

摘要:
单点登录的概念对于很多技术人来讲,可能看到“单点”这个字眼就觉得是单点部署,甚至会有高可用的问题,其实不然,此处的“单点”并不是是部署上的“单点”,而是指所有系统的登录,认证逻辑都挪到同一个系统,而不再是分散到各个系统中。一个好的单点登录系统需要做些什么?id=1235.5.在zsso登录页登录,账号:zhoudapeng密码:12345由于篇幅原因,具体的设计思路我将在下一篇文章中介绍,敬请期待!

单点登录系统的由来

随着互联网技术的发展,目前各大公司都在疯狂扩张业务,比如像阿里巴巴,旗下就有淘宝,天猫,支付宝等业务线,按照目前的互联网产品,基本上每个产品都会涉及到账户体系,不管是社交也好,电商也罢,都省不了需要一套账号体系,我们在平时的生活过程中其实也经常遇到这样的问题,比如下载某个APP,就得来一次注册的流程,虽然目前的注册流程相对简单,但是对用户来讲依然比较麻烦,对此第三方登录便应运而生,比如我们经常会在登录页看到类似“微信登录”,“人人网账号登录”,“微博账号登录”等登录入口,其本质也是为了简化用户的登录逻辑,但是由于微信,人人网,微博的账号也不互通,这种第三方登录的方式仍然解决不了根本问题,最理想的情况是我们在某一个地方登录后进任何网站都不需要再登录,但这终究也只会是个设想,因为每个公司的账号体系都早已成熟,集成所有公司的账号体系显然代价很大,而且企业基于安全问题也不会愿意合作,那既然公司与公司间不能互通,公司内的系统直接能否互通呢,比如阿里系的淘宝和天猫,我们发现其实现在已经做到了互通,我在淘宝上登录后,再进天猫的时候就不需要再登录了,还有就是比如企业内部的管理系统,企业内部可能会有wiki,bbs,gitlab,oa等系统,如果每个账号都需要单独注册,单独登录,这对于公司每个人来讲都是不可接受的,所以单点登录系统应运而生。

单点登录的概念

对于很多技术人来讲,可能看到“单点”这个字眼就觉得是单点部署,甚至会有高可用的问题,其实不然,此处的“单点”并不是是部署上的“单点”,而是指所有系统的登录,认证逻辑都挪到同一个系统,而不再是分散到各个系统中。

一个好的单点登录系统需要做些什么?

  1. 跨域

这是一个很重要的考核标准,很多单点登录的实现都不能做到跨域,必须都在同一个父域名下,比如 a.xxx.com,b.xxx.com,c.xxx.com这种域名,如果再有a.yyy.com就做不到了,这样都话很显然就有局限性,必须限制服务部署的域名

2.账号同步

比如我在A系统注销登录,那么进入B系统时也必须是注销状态,否则单点登录的价值就不存在了

3.接入方便

要实现单点登录,肯定需要开发者介入开发,如果接入流程繁琐的话,恐怕就会很难推进

本人前段时间基于兴趣写了一个单点登录的工程,在此先介绍一下此系统

源码地址:https://github.com/zhoudapeng/zsso

本工程一共分为4个模块:zsso-client,zsso-client-demo,zsso-common,zsso-server

职责划分如下:

zsso-client:客户端相关代码,以jar包形式存在,客户端接入时需要依赖此模块,此模块集成了跟server端的交互逻辑已经对于zsso命名空间的支持

zsso-server:服务端实现,以war包形式存在,直接部署

zsso-common:公共模块

zsso-client-demo:客户端demo,供使用者参考

先介绍下使用方式

  1. 在web.xml中配置过滤器

<filter><filter-name>zssoFilter</filter-name><filter-class>com.zdp.zsso.client.filter.ZssoFilter</filter-class></filter><filter-mapping><filter-name>zssoFilter</filter-name><url-pattern>/*</url-pattern> </filter-mapping>

2.在应用层spring配置文件配置自动驱动

<zsso:auto-driven/>

3.配置zsso-client配置文件,配置文件可以分环境配置,分别见src/main/profiles/(dev|beta|product),配置项示例如下:

#系统名,需要在server端备案zsso.system.name=wiki #本地cookie的domain zsso.system.cookie.domain=.wiki.com #server端url前缀 zsso.server.url.prefix=http://www.zsso.com:8080

4.按需拓展相关组件,组件一共包括4个部分,且都有默认实现,接入方可以按需自己实现相关组件:

UrlHelper:拼接url的组件,如无特殊需求不建议重新实现

ZssoClient:跟服务端交互的组件,如无特殊需求不建议重新实现

ZssoConfigResolver:解析配置文件的组件,默认实现是读取本地classpath下zsso-client.properties配置文件,如无特殊需求不建议重新实现

UserStore:存取用户信息的组件,包括根据token解析用户信息,绑定token与userId关系,解绑token,默认实现只是为了演示用,接入方请务必自己实现此接口

5.快速使用:

5.1.为了模拟跨域的情况,先绑定本地host

127.0.0.1 www.zsso.com127.0.0.1 www.wiki.com 127.0.0.1 www.bbs.com

5.2.启动zsso-server端,使用8080端口

5.3.启动zsso-client-demo,使用8081端口

5.4.访问http://www.wiki.com:8081/profile/detail?id=123

5.5.在zsso登录页登录,账号:zhoudapeng 密码:12345

由于篇幅原因,具体的设计思路我将在下一篇文章中介绍,敬请期待!

免责声明:文章转载自《如何设计一个单点登录系统(1)?》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jquery模拟点击事件javaweb:HTML&amp;amp;CSS下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Atitit. 单点登录sso 的解决方案 总结

Atitit.  单点登录sso 的解决方案 总结 1. 系统应用场景and SSO模式选型 2 2. 系统应用的原则与要求 2 2.1. 开发快速简单::绝大部分系统来说,开发快速简单为主 2 2.2. 支持token交换,这样有利于集成先有的系统模块无需大改动,仅仅需要改动登陆模块。。 2 2.3. 支持用户名映射.当多个子系统userna...

JWT黑名单和白名单

单点登录系统 单点登录系统保存了用户的登录名和密码,上网用户在单点登录系统中认证成功后,就可以直接登录各个业务系统。 1. 用户使用单点登录系统的登录界面,输入用户名和密码登录成功后, 单点登录系统为用户浏览器安装一个cookie,cookie的值是一个全局唯 一的字符串 (下文称为ticket),理论上这个唯一值永远不能重复,用来 标识用户成功的登录请求...

基于 Cookie 的 SSO 中间件 kisso

kisso  =  cookie sso 基于 Cookie 的 SSO 中间件,它是一把快速开发 java Web 登录系统(SSO)的瑞士军刀。欢迎大家使用 kisso !!  kisso 帮助文档下载 1、支持单点登录 2、支持登录Cookie缓存 3、支持防止 xss攻击, SQL注入,脚本注入 4、支持 Base64 / MD5 / A...

cookie 跨域访问的解决方案

Cookie同域单点登录 最近在做一个单点登录的系统整合项目,之前我们使用控件实现单点登录(以后可以介绍一下)。但现在为了满足客户需求,在不使用控件情况下实现单点登录,先来介绍一下单点登录。 单点登录:多个不同系统整合到统一加载个平台,用户在任何一个系统登录后,可以访问这个统一加载上的所有系统。登录之后,用户的权限和信息不再受某个系统的限制,即使某个系...

CAS Client 3.2.1 配置详解

CAS Client 3.2.1 配置详解 http://www.pinhuba.com/casclient/101256.htm 摘要: CAS作为开源的单点登陆框架已经非常的流行了。由于它对已有系统的入侵性小,支持的语言多,备受广大开发者关注; CAS作为开源的单点登陆框架已经非常的流行了。由于它对已有系统的入侵性小,支持的语言多,备受广大开发者关注...

CAS单点登录------302个没完没了

我的配置如上 背景:Shiro + Cas 进行的单点登录配置! 其实这个问题很扯淡!看代码! 我本在shiro里面配置的Sucessurl !嘿嘿!我哭了!屌用没有! 我一脸懵逼大写的WHY??? 其实这个是CAS  登录成功这个服务是交给CAS 来进行重定向的,这个你百度下,就知道了! 改成了上面这样!     草,发现重定向了还是存在,,,,...