单点登录系统构建之一——基础知识(Kerberous/SAML)

http://web.mit.edu/kerberos/

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可以与任何传输协议捆绑。

原文地址:https://www.cnblogs.com/jiyuqi/p/5446825.html