SSO入门

SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。

实现机制

当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份校验,如果通过校验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行校验,检查ticket的合法性。如果通过校验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。 要实现SSO,需要以下主要的功能:

系统共享

统一的认证系统是SSO的前提之一。认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。另外,认证系统还应该对ticket进行校验,判断其有效性。

信息识别

要实现SSO的功能,让用户只登录一次,就必须让应用系统能够识别已经登录过的用户。应用系统应该能对ticket进行识别和提取,通过与认证系统的通讯,能自动判断当前用户是否登录过,从而完成单点登录的功能。

另外:

1、单一的用户信息数据库并不是必须的,有许多系统不能将所有的用户信息都集中存储,应该允许用户信息放置在不同的存储中,事实上,只要统一认证系统,统一ticket的产生和校验,无论用户信息存储在什么地方,都能实现单点登录。 2、统一的认证系统并不是说只有单个的认证服务器 当用户在访问应用系统1时,由第一个认证服务器进行认证后,得到由此服务器产生的ticket。当他访问应用系统2的时候,认证服务器2能够识别此ticket是由第一个服务器产生的,通过认证服务器之间标准的通讯协议(例如SAML)来交换认证信息,仍然能够完成SSO的功能。

技术实现的方式:

(1)基于cookies实现,需要注意如下几点:如果是基于两个域名之间传递sessionid的方法可能在windows中成立,在unix&linux中可能会出现问题;可以基于数据库实现;在安全性方面可能会作更多的考虑。另外,关于跨域问题,虽然cookies本身不跨域,但可以利用它实现跨域的SSO。 (2) Broker-based(基于经纪人),例如Kerberos等;这种技术的特点就是,有一个集中的认证和用户帐号管理的服务器。经纪人给被用于进一步请求的电子的身份存取。中央数据库的使用减少了管理的代价,并为认证提供一个公共和独立的"第三方"。例如Kerberos,Sesame,IBM KryptoKnight(凭证库思想)等。Kerberos是由麻省理工大学发明的安全认证服务,当前版本V5,已经被UNIX和Windows作为默认的安全认证服务集成进操作系统。 (3) Agent-based(基于代理人)在这种解决方案中,有一个自动地为不同的应用程序认证用户身份的代理程序。这个代理程序需要设计有不同的功能。比如,它可以使用口令表或加密密钥来自动地将认证的负担从用户移开。代理人被放在服务器上面,在服务器的认证系统和客户端认证方法之间充当一个"翻译"。例如SSH等。 (4) Token-based,例如SecurID,WebID,现在被广泛使用的口令认证,比如FTP,邮件服务器的登录认证,这是一种简单易用的方式,实现一个口令在多种应用当中使用。 (5) 基于网关Agent and Broker-based,这里不作介绍。 (6) 基于安全断言标记语言(SAML)实现,SAML(Security Assertion Markup Language,安全断言标记语言)的出现大大简化了SSO,并被OASIS批准为SSO的执行标准。开源组织OpenSAML 实现了 SAML 规范。

由于本人只做了基于cookie的sso系统,所以下面的内容都是基于cookie的技术实现的分析。

sso体系结构

  1. 认证中心
  2. 用户和账号系统,用户数据获取接口
  3. 客户端模块
  4. 令牌

如上图,认证中心的功能就是,验证用户的权限已经对用户进行发放token等。 为了做到对用户的统一管理和配置,通常认证中心配有用户和账号体系,并对业务系统提供用户数据获取接口。客户端模块主要是进行对用户访问的业务系统前进行拦截。对用户的访问进行检测。令牌就是sso中重要的概念,主要用于用户的权限以及有效性的凭证。

sso认证流程

上图,sso的认证流程,主要分成三块,一块是验证token的存在和有效性,一块是用户的验证授权以及生成token。另一块就是对用户请求进行捕获拦截。

具体的详细的认证流程如下:

基于cookie的实现的sso的涉及的技术

1、HTTP、cookie与session 2、cookie与session的关系 3、cookie,SSO令牌的载体 4、决定cookie内容、生命周期和有效范围的7个属性 1)name & value 2)expires 3)path & domain 4)httpOnly & secure 5、JavaScript操作cookie的方法 6、Java Web应用中操作cookie的方法 7、filter,Web层的拦截器

另外需要考虑的一些问题,就是跨域问题。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏CSDN技术头条

基于HBase的大数据存储的应用场景分析

本文结合两个实战场景就基于 HBase 的大数据存储做了简单的分析,并对 HBase 的原理做了简单的阐述。

72160
来自专栏编程

java缓存技术总结

一、什么是缓存 1、Cache是高速缓冲存储器 一种特殊的存储器子系统,其中复制了频繁使用的数据以利于快速访问 2、凡是位于速度相差较大的两种硬件/软件之间的,...

57750
来自专栏北京马哥教育

SQLAlchemy基本使用

云豆贴心提醒,本文阅读时间6分钟,文末有秘密! ORM介绍 ORM(Object-Relational Mapping) 架构,采用元数据来描述对象-关系映射...

40670
来自专栏Golang语言社区

由Go语言并发模型想到游戏服务器并发

这段时间看了一些Go语言相关的东西,发现Go语言的最大特性并发模型类似于C++里面的线程池,正好我们项目服务器也是用的线程池,记录下。   Go语言的并发单位是...

45280
来自专栏编程坑太多

最主流的SSM实现的通用权限管理系统

27420
来自专栏MoeLove

关于 webpack 你所忽略的细节(附源码分析)

随着前端技术的火热发展,工程化,模块化和组件化的思想已逐步成为主流,与之相应的,就需要有一整套工具流可以支撑起它。

10330
来自专栏编程

使用GitHub搭建个人博客

今年使用GitHub搭建了自己的博客:kaze2017.com 我整理了一下搭建博客的过程,分为购买域名、准备环境、Git和GitHub、搭建博客、绑定域名、感...

340100
来自专栏编程微刊

用node.js从零开始去写一个简单的爬虫

如果你不会Python语言,正好又是一个node.js小白,看完这篇文章之后,一定会觉得受益匪浅,感受到自己又新get到了一门技能,如何用node.js从零开始...

12010
来自专栏小狼的世界

Git的深入理解与GitHub托管服务的使用

许多人习惯用复制整个项目目录的方式来保存不同的版本,或许还会改名加上备份时间进行区别。这么做的唯一好处就是简单,坏处也不少:有时候会混淆所在的工作目录,一旦弄错...

14830
来自专栏北京马哥教育

Linux老司机带你学Zabbix从入门到精通(万字长文)

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案,在企业中有非常全面的应用,本文是Linux运维老司机撰写,一站式帮...

907110

扫码关注云+社区

领取腾讯云代金券