SSO单点登录可以自己实现吗?--开源软件诞生10
ERP与SSO的恩怨情仇--第10篇
用日志记录“开源软件”的诞生
赤龙 ERP 开源地址:
点亮星标,感谢支持,与开发者交流 kzca2000
码云:https://gitee.com/redragon/redragon-erp
GitHub:https://github.com/redragon1985/redragon-erp
赤龙ERP官网:https://www.redragon-erp.com
为什么要用单点登录
首先大部分系统都不是孤立存在的,尤其是信息化系统。它们往往在一个大的平台上,由多个独立的系统组成。如果想访问多个系统,那么多次重复的进行登陆往往是不能接受的,那么一个统一的登陆入口就变得必不可少。这就是单点登录。
单点登录的特点是:
(1)统一的登陆入口和注销入口
(2)共享的用户信息数据
(3)可实现跨域、跨多应用、跨多浏览器的认证
(4)可实现较高的安全认证机制
(5)可扩展的授权机制
是否需要实现自己的SSO
是否需要实现自己的SSO呢?要回答这个问题。首先要明白SSO是如何实现的。那我们先来看看登陆如何实现,常见的做法是,输入用户名、密码、验证码,点击登陆验证用户名和密码是否正确,验证通过后获取用户信息,并跳转请求的页面。登陆状态和用户信息一般会存储在session、cookie或本地缓存;当然有时还会引入token验证登陆状态。
这个过程看似实现很简单,但里面有个致命的问题,不管session、cookie或本地缓存,都是存储在应用服务器本地的,这就使得统一认证、共享状态、跨域等多个问题变得不可能。下面我们来看看SSO是如何做的:
(1)当客户端发送请求访问应用的某一路径,应用会先判断当前用户本地的登陆状态,如果当前用户存在登陆状态则正常访问;如果用户没有登录则重定向到单点登录的服务端
(2)单点登录服务端会先通过cookie验证当前用户在服务端存储的登陆状态,如果存在则跳转回应用路径,并在客户端存储登陆状态。如果当前用户没有登录,则进行用户认证。(即输入用户名和密码的登陆动作)
(3)服务器认证成功后,会产生一个票据,带着这个票据并设置cookie跳转回客户端的接收路径
(4)客户端会在接收路径中重新访问服务端,去验证票据的合法性,成功后反馈用户的认证信息和相关数据给客户端
现在明白了单点登录是如何实现的,下面来回答本节开始的问题。要看使用场景,如果是互联网的项目我建议自己实现或优化此流程实现,但我现在研发的是一款开源ERP,在考虑安全性,可扩展性、时间成本等多方面的前提下,当然没有必要自己开发,拿成熟的产品优化即可。下面来看看我做了哪些优化。
CAS与Shiro的整合
CAS是Apache的开源SSO,解决的是认证的问题;Shiro是安全性框架,解决的是授权和会话管理。这也是【赤龙ERP】使用的两个技术。基本流程是:
(1)Cas先做用户认证,并获取用户信息(此过程通过SSL加密)。
(2)Shiro与Cas整合,在cas认证成功后交由shiro绑定认证状态、用户信息,并在shiro中获取用户权限,所有信息均存储在会话中。
(3)通过shiro配置实现对所有请求的拦截,并可以通过标签控制页面显示的内容(shiro的授权都是通过角色和权限两级完成的)。
【赤龙ERP】对CAS和Shiro做了哪些优化
其实不管是Cas和Shiro本来的功能上都有一些欠缺,在【赤龙ERP】中我做了相关优化。
(1)cas的登录页面的客户化,cas本身的登陆页面不好看,所以需要针对不同的场景做客户化。
(2)cas的登录页面更多数据的提交,本身登陆页面只接受用户名和密码的提交,不支持其他字段,但往往有时需要提交更多的字段,比如:账套。
(3)cas对于通过接口进行用户验证的功能比较欠缺,在此也做了弥补。
(4)cas记住密码的功能在和Shiro整合后存在一些问题,在此已解决。
(5)cas用户注销和Shiro整合后,存在一些情况下无法同步注销的问题,在此已解决。
(6)Shiro本身的会话存储在Ehcache本地缓存中,但整合Cas后会出现跨域、跨浏览器、跨应用的数据同步问题,优化后将会话存储在Redis中。
希望您读完本文可以帮助笔者进入【码云】或【GitHub】搜索“赤龙ERP”点击星标。等待着您的支持!
SSO单点登录可以自己实现吗?--开源软件诞生10的更多相关文章
- CAS实现SSO单点登录原理
1. CAS 简介 1.1. What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...
- CAS实现SSO单点登录原理(转)
1. CAS 简介 1.1. What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨 ...
- SpringCloud系列——SSO 单点登录
前言 作为分布式项目,单点登录是必不可少的,文本基于之前的的博客(猛戳:SpringCloud系列——Zuul 动态路由,SpringBoot系列——Redis)记录Zuul配合Redis实现一个简单 ...
- 转 CAS实现SSO单点登录原理
原文链接 http://m.blog.csdn.net/hxpjava1/article/details/74019017 CAS 简介 1. 1.1. What is CAS ? CAS ( ...
- SSO单点登录的发展由来以及实现原理【转】
单点登录以及权限,在很早之前都有写过,不过都比较简单,今天就具体说一下,以及下一步要做的 1.web单系统应用 早期我们开发web应用都是所有的包放在一起打成一个war包放入tomcat容器来运行的, ...
- 一篇文章彻底弄懂CAS实现SSO单点登录原理
1. CAS 简介 1.1. What is CAS ? CAS ( Central Authentication Service ) 是 Yale 大学发起的一个企业级的.开源的项目,旨在为 Web ...
- Java项目接入sso单点登录
最近在落地cat(java开发的一款开源监控系统)接入公司的内部项目,其中有项需求是接入公司的sso单点登录系统.研究了公司之前java项目接入sso系统,大部分是采用spring框架,然后依赖spr ...
- 开发SSO单点登录需要注意的问题
一.单点登录系统开发需要注意的问题 1.单点登录系统需要支持jsonp请求? 单点登录系统主要是向其他系统提供用户身份验证服务,因此需要提供对外接口,而外部系统通过接口访问时,必然涉 ...
- 基于CAS实现SSO单点登录
1. 概述 1.1. 什么是SSO? 单点登录( Single Sign-On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要 登录一 ...
随机推荐
- JMX基本概念
Object name的语法 形似 com.sun.someapp:type=Whatsit,name=25 com.sun.someapp 是domain,冒号后面的是key-property-li ...
- GUAVA-cache实现
GUAVA Cache Guava Cache与ConcurrentMap很相似基于分段锁及线程安全,但也不完全一样.最基本的区别是ConcurrentMap会一直保存所有添加的元素,直到显式地移除 ...
- 使用IDEA新建基于SpringBoot的Web项目(超详细)
目前java的开发很多Learner都慢慢的学习使用IDEA这款工具,个人觉得其实相比Eclipse来说差不多,个人习惯的问题,但是我还是推荐IDEA这款工具.虽然它目前是收费的,但相信网上的各种破解 ...
- Springboot + Rabbitmq + WebSocet + vue
1.pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId& ...
- 【测试技术分享】Liunx常用操作命令集合
Linux命令 ls 查看文件目录内容 ls -lha l:详细信息 h:人性化显示 a:查看隐藏目录 ls -目录名 查看指定目录 d rwx rwx rwx d:文件夹 -:文件 rwx:拥有 ...
- Java动态代理(三)——Cglib动态代理
一.Cglib动态代理Cglib是一个优秀的动态代理框架,它的底层使用ASM在内存中动态的生成被代理类的子类,使用Cglib即使代理类没有实现任何接口也可以实现动态代理功能.而且,它的运行速度要远远快 ...
- java爬取图片示例
爬虫是什么 这里引用一下 wiki 中关于 网络爬虫的定义,相信大家看过后会有一个清晰的认识 网络爬虫(英语:web crawler),也叫网络蜘蛛(spider),是一种用来自动浏览万维网的网络机器 ...
- 企业站如何做长尾关键词seo优化
http://www.wocaoseo.com/thread-315-1-1.html 很多企业站,优化到一定程度后网站的流量很快就上去了,但是之后网站就无法更进一步.那么对于普通中小型企业站 ...
- Windows五次Shift漏洞
本文首发于我的个人博客. 在小破站上看到了一个关于Windows五次shift的视频,觉得很有意思,就像拿来复现一下试试.原视频是在Window7虚拟机上进行的,由于现在基本上都已经用Win10了,我 ...
- Ubuntu 16.04 安装CP210x,CH340驱动
CH340 https://github.com/juliagoda/CH341SER CP210x 因为源码版本不是linux-source-4.15.0-91-generic,导致error,一个 ...