单点登录系统构建之一——基础知识(Kerberous/SAML)
Kerberos
Kerberous是一个网络身份验证协议,它被设计为客户端/服务器提供基于密钥的强加密机制。该协议最初由MIT实现并被广泛商用。
互联网不是安全的,很多互联网协议并不提供安全性保证,网络上经常有“嗅探”密码的行为,因此在网络上发送未加密密码的行为是非常危险的。
有些网站视图通过防火墙或者定义不同的防火墙规则来解决网络安全问题,但是防火墙是基于认为入侵者在内部网络之外这种情况的,实际上,大多数的泄密或者攻击行为都发生在组织网络内部。
Kerberous是MIT针对网络安全问题提出的一个解决方法,它基于对称加密技术保证客户端对服务器是唯一的和不可伪造的,而且整个协议是基于不安全网络环境设计的。当客户端与服务器完成了认证,其可以加密客户端与服务器的全部通信。
SAML
介绍
理解 SAML 的概念很重要,个人认为 SAML 协议的原理跟 CAS/Kerberos 很类似,理解上不存在困难,但 SAML 引入了一些新的概念名词,因此要先把握清楚这些概念。
断言,这个在 SAML 的 ”A” ,是整个 SAML 协议中出现的最多的字眼,我们可以将断言看作是一种判断,并且我们相信这种判断,因此,做出断言的一方必须被信赖。校验来自断言方的断言必须通过一些手段,比如数字签名,以确保断言的确实来自断言方。
SAML 目标是让多个应用间实现联邦身份 (Identity Federation) ,提起联邦,大家可以想象一下欧盟,欧盟国家之间的公民都具有一个联邦身份,比如 Peter 是法国公民, John 是比利时公民,这两个公民的身份都能够互相被共享,恰好,张三是一个中国公民,但他能像 Peter 和 Jhhn 那样随意进入欧盟国家,显然不能,因为它不具有欧盟联邦身份。
理解了联邦的概念,我们就可以回到 SAML 上, SAML 解决了联邦环境中如何识别身份信息共享的标准化问题,比如,法国的 Peter 进入比利时,他如何证明自己的身份呢?
SAML 就是为了解决这个问题。
在联邦环境中,通常有下面的 3 种实体:
l Subject ( 主题 ) : Subject 是 SAML 实体中的第一个重要的概念, Subject 包括了 User 、 Entity 、 Workstation 等能够象征一个参与信息交换的实体。
l Relying Party ( 信任方 ) : SAML 中的 Service Provider 角色,也就是提供服务的一方。
l Asserting Party ( 断言方 ) : SAML 中的 Identity Provider 角色,用于提供对主题的身份信息的正确的断言,类似一个公证机构。
我们看看联邦环境的一个场景:
假设有一个 Peter(Subject) 的法国公民,他需要访问比利时 (Service Provider) ,他在比利时机场被要求提供身份信息, Peter 提供了欧盟 (Federation) 的通行证件,随即,这个通行证件在比利时机场被审核,或通过计算机送到欧盟身份认证中心 (Identity Provider) ,该中心有一个由所有欧盟国家共同建立的公民数据库,中心审核了 Peter 的身份信息,并断言“ Yes , He is Peter From France ”,于是, Peter 得到礼貌的回应“欢迎光临比利时”。
如果你将欧盟看作是一个联邦环境,你会发现上面的场景跟在联邦环境应用 SAML 很相似。
在联邦环境下,任何需要授权访问的服务都需要知道服务请求方的身份主题信息 (Who are you) ,服务提供方 (Service Provider) 不负责审核用户的身份信息,但它依赖于 1 个甚至多个 Identity Provider 来完成此任务,见下图。
1 个 Idnetity Provider 可以被多个 Service Provider 共享,当然,共享的前提是建立信任关系 ( 即 Service Provider 要信任 Idnetity Provider) ,就好比如,如果比利时(Service Provider) 需要开放对欧盟国家成员访问,它信任欧盟的 Idnetity Provider ,它信任欧盟的 Idnetity Provider 的任何判断,包括 ”He is Peter From France” 。至于是否让 Peter 入境,那是受权限策略的控制 ( 注意 SAML 同样对 Authorization 断言做了标准化,此处,我们仅仅关注 Authentication) 。

原理
在协议角度,SAML原理非常类似于CAS和Kerberous,CAS协议依赖于CAS Server,Kerberous依赖于KDC,而SAML依赖于Identity Provider。
根据Service Provider(SP)与Identity Provider(IDP)的交互方式,SAML可以分成如下两种方式:一种是SP拉方式,一种是IDP推方式。
在 SAML 中,最重要的环节是 SP 如何获取对 Subject 的断言, SP 拉方式是 SP 主动到 IDP 去了解 Subject 的身份断言,而 IDP 推方式则是 IDP 主动把 Subject的身份断言通过某种途径告诉 SP 。
SAML的POST/Artifact Binding方式(SP拉)
该方式的主要特点是, SP 获得客户端的凭证 ( 是 IDP 对 Subject 的一种身份认可 ) 之后,主动请求 IDP 对 Subject 的凭证的断言。
Subject 访问 SP 的受保护资源, SP 发现 Subject 的请求中没有包含任何的授权信息,于是它重定向用户访问 IDP.

1, Subject 向 IDP 请求凭证 ( 方式是提交用户名 / 密码 )
2, IDP 通过验证 Subject 提供的信息,来确定是否提供凭证给 Subject
3, 假如 Subject 的验证信息正确,他将获取 IDP 的凭证以及将服务请求同时提交给 SP 。
4, SP 接受到 Subject 的凭证,它是提供服务之前必须验证次凭证,于是,它产生了一个 SAML 请求,要求 IDP 对凭证断言
5, 凭证是 IDP 产生的,它当然知道凭证的内容,于是它回应一个 SAML 断言给 SP
6, SP 信任 IDP 的 SAML 断言,它会根据断言结果确定是否为 Subject 提供服务。
SAML的Redirect/Post Binding方式(IDP推方式)
该方式的主要特点是, IDP 交给 Subject 的不是凭证,而是断言。
1 , Subject 访问 SP 的授权服务, SP 重定向 Subject 到 IDP 获取断言。
2 , IDP 会要求 Subject 提供能够证明它自己身份的手段 (Password , X.509 证书等 )
3 , Subject 向 IDP 提供了自己的帐号密码。
4 , IDP 验证密码之后,会重订向 Subject 到原来的 SP 。
5 , SP 校验 IDP 的断言 ( 注意, IDP 会对自己的断言签名, SP 信任 IDP 的证书,因此,通过校验签名,能够确信从 Subject 过来的断言确实来自 IDP 的断言 )。
6 ,如果签名正确, SP 将向 Subject 提供该服务。

总结
SAML协议仍然在不断发展,从1.0发展到2.0,并由OASIS发布。
SAML在SOA中扮演着关键角色,由于用户要求将企业资源由面向接口/数据变为面向服务,识别身份称为最大的问题。
SAML与SOA一样,不依赖于传输协议,事实上SAML可以与任何传输协议捆绑。
单点登录系统构建之一——基础知识(Kerberous/SAML)的更多相关文章
- 单点登录系统构建之二——SSO原理及CAS架构
基本概念 SSO(Single Sign On)单点登录,是在多个应用系统中,用户只需要登录一次就能访问所有相互信任的应用系统.它包括将这次的主要登录映射到其他应用中用户同一个用户的登录机制. SSO ...
- 八幅漫画理解使用JSON Web Token设计单点登录系统
用jwt这种token的验证方式,是不是必须用https协议保证token不被其他人拦截? 是的.因为其实只是Base64编码而已,所以很容易就被解码了.如果你的JWT被嗅探到,那么别人就可以相应地解 ...
- 单点登录系统实现基于SpringBoot
今天的干货有点湿,里面夹杂着我的泪水.可能也只有代码才能让我暂时的平静.通过本章内容你将学到单点登录系统和传统登录系统的区别,单点登录系统设计思路,Spring4 Java配置方式整合HttpClie ...
- 八幅漫画理解使用 JSON Web Token 设计单点登录系统
原文出处: John Wu 上次在<JSON Web Token – 在Web应用间安全地传递信息>中我提到了JSON Web Token可以用来设计单点登录系统.我尝试用八幅漫画先让大家 ...
- [转]八幅漫画理解使用JSON Web Token设计单点登录系统
上次在<JSON Web Token - 在Web应用间安全地传递信息>中我提到了JSON Web Token可以用来设计单点登录系统.我尝试用八幅漫画先让大家理解如何设计正常的用户认证系 ...
- 教你开发asp.net的单点登录系统
单点登录系统,简称SSO.以下是我花了几个小时写的一个简单实现.特把实现思路和大家分享. 背景:某项目使用ASP.NET MemberShip来做会员系统,需要同时登录多个系统.而项目的开发人员无法在 ...
- 单点登录系统(SSO)的开发思路
单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码 ...
- 多平台的网站实现单点登录系统(SSO)的开发思路 让你的会员中心更加统一(参考资料)
单点登录并不是一个新鲜的玩意儿,比较官方的解释是企业业务整合的解决方案之一,通俗来讲SSO就是一个通用的用户中心,国内比较流行的UCenter就是一套单点登录解决方案.而近期以CSDN明文存储用户密码 ...
- 开源单点登录系统CAS入门
一.什么是CAS CAS 是 Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目.CAS 具有以 ...
随机推荐
- .NET设计模式(6):原型模式(Prototype Pattern)(转)
概述 在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构.这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适.那么如何封装这种动态的 ...
- CentOS用yum安装X Window
安装X图形界面系统 yum list 列出所有可安装的软件包 可以通过 yum grouplist 来查看可能批量安装哪些列表 先装X windows #yum groupinstall 'X Win ...
- 从idea到ipo
**************************************************************************************************** ...
- 一个Form中2个按钮,PHP后台如何判断提交的是哪一个按钮
方法一: <div class="container theme-showcase" role="main"> <form class=&qu ...
- ExtJs之Ext.apply
<!DOCTYPE html> <html> <head> <title>ExtJs</title> <meta http-equiv ...
- (11)nehe教程5---3D空间
3D空间: 我们使用多边形和四边形创建3D物体,在这一课里,我们把三角形变为立体的金子塔形状,把四边形变为立方体. 在上节课的内容上作些扩展,我们现在开始生成真正的3D对象,而不是象前两节课中那样3D ...
- C# Socket 入门4 UPD 发送结构体(转)
今天我们来学 socket 发送结构体 1. 先看要发送的结构体 using System; using System.Collections.Generic; using System.Text; ...
- hdu 4159 Indomie (DP,数学概率)
推出数学公式: #include<stdio.h> #include<string.h> __int64 C(int m,int n) { __int64 tmp=; if(m ...
- Delphi对象变成Windows控件的前世今生(关键是设置句柄和回调函数)goodx
----------------------------------------------------------------------第一步,准备工作:预定义一个全局Win控件变量,以及一个精简 ...
- css:map热点的应用
映射图像(Image Map)可以实现的效果是:一张图片上点不同位置可以跳转到不同的地方, 实例: 1.插入一张图片 2.在底部“属性”栏中选择合适的热点工具,在图片上绘制热点区域,如 3.然后返回代 ...