SAML - SSO(转)

http://baike.baidu.com/view/758527.htm?fr=aladdin

SAML即安全断言标记语言,英文全称是Security Assertion Markup Language。它是一个基于XML的标准,用于在不同的安全域(security domain)之间交换认证和授权数据。在SAML标准定义了身份提供者(identity provider)和服务提供者(service provider),这两者构成了前面所说的不同的安全域。 SAML是OASIS组织安全服务技术委员会(Security Services Technical Committee)的产品。

目录


1定义


2背景


3SAML作用


4SAML框架


5安全


6SAML支持

1定义编辑

SAML(Security Assertion Markup Language)是一个XML框架,也就是一组协议和规范,可以用来传输企业用户身份证明, 主要是企业外的身份跨域传递。比如,公司(idp)的用户要访问SAAS 应用(sp),为了保证身份安全,我们可以采用除了加密签名等措施,还要采用SAML规范来传输,传输的数据以XML形式,内容符合SAML的推荐标准,这样我们就可以不要求idp和sp采用什么样的系统,只要求能理解SAML规范即可,显然比传统的方式更好。SAML 规范是一组Schema 定义。

可以这么说,在Web Service 领域,schema就是规范,在Java领域,API就是规范。

2背景编辑

安全是所有Web项目在设计时都要考虑的一个重要因素。无论是选择最短口令,决定何时使用SSL加密HTTP会话,还是通过自动登录cookie来识别用户,都经常要付出重大的设计努力,以保护用户的身份信息和他们可能存放于Web站点的其他资料。糟糕的安全性可能带来公关灾难。当最终用户努力保持对其个人信息的控制时,他们要面临令人迷惑的隐私政策,需要牢记众多站点的不同口令,以及遭遇“钓鱼式攻击”事件。在宏观层次上,数字身份引起了许多复杂的技术和社会问题,业界一些团体如Liberty Alliance和IdentityGang都正试图通过开发新的技术标准来解决它们。在较小的规模上,可以使用一些工具来为用户提供更好的安全性。请考虑口令管理问题。用户访问他们保存个人资料的Web站点,在可以存取他们的资料之前必须经过验证。通过验证来鉴别用户,确保他们是所声称的用户。进行验证最简单方式是使用口令。然而,若每个站点都需要各自的一套口令,用户将有难以控制的大量口令。1998年微软首先尝试通过其Passport network提供该问题的全球解决方案。Passport使得任意Web站点使用用户提交给Passport的个人资料(如用户名、地址、信用卡号)成为可能。Passport是单点登录(single sign-on,SSO)的第一次电子商务尝试。它没有流行起来,部分原因是由于人们对系统封闭性的担心。然而,SSO的理念非常引人注目,许多开放标准和商业计划都追随Passport其后。通过SSO,某个Web站点可以与其他站点共享用户身份信息。 SSO对于使用应用服务提供商(Application Service Provider,ASP)软件服务的企业特别有用。ASP在自己的服务器上宿主应用程序,出售其访问权作为服务。公司可以在它的标准目录服务器里管理自己的用户和口令,然后通过SSO授予用户访问ASP应用程序的权限。SSO允许公司管理自己用户的信息,不必为每一员工维护多个用户账号。对用户来说,SSO的好处在于他们可以在多个应用程序中使用一个用户名和口令,并且在应用程序之间切换时无需重新验证。SSO不仅仅用于Web应用程序,它可用于任何类型的应用程序,只要有安全地传送身份信息的协议。这种通信方式的开放标准就是安全性断言标记语言(SAML)。

SAML的应用随着云计算的发展而得到了更快的推广。越来越多的企业意识到,在每一个SAAS厂商维护一套用户名和密码是一件费时费力的事情, 寻求将企业内的身份认证扩展到SAAS应用中。领先的SAAS应用厂商如Google, Salesforce纷纷提供SAML的单点登录接口。 Sun 推出了一个开源的Java 项目OPENSSO,看起来一度前景美妙, 随着Oracle的收购,这一项目似乎搁浅了(Oracle 有自己的支持saml的商用平台)。IBM,CA 等不甘落后,纷纷推出自己的产品。 Microsoft的ADFS声称支持SAML 2.0(不支持1.1).这些产品的共同特点是兼容性不高, 和自己的产品线结合还算不错, 但是和其它厂商的产品互联有局限性。 异军突起的是一个总部位于美国的丹佛的Pingidentity。 它推出的Pingfederate, 基于Java 平台,除了支持SAML 2.0和1.1外, 还支持WS-Federation (微软主推),近两年又推出支持Oauth的版本(6.6以后)。除了产品,该公司还网拢了一批业界资深的人士, 积极参与SAML的标准制定和应用推广。 可以看到, SAML的应用得到了领先的企业和SAAS应用厂商的大力支持, 目前上百家SAAS厂商[1] 声称自己支持SAML单点登录。

3SAML作用编辑

SAML 主要包括三个方面:

1.认证申明。表明用户是否已经认证,通常用于单点登录

2.属性申明。表明 某个Subject 的属性。

3.授权申明。表明 某个资源的权限。

4SAML框架编辑

简单说, SAML就是一方向另一方发送SAML 请求,然后另一方返回SAML响应。数据的传输以符合SAML规范的XML格式表示。 连接中的任何一方都可以发起请求, 根据身份不同, 可以说是IDP init请求, 或是SP init 请求。

这里以SAML实现的业界领先厂商的PingFederate为例,来说说IDP init SSO (详细流程可以参阅参考资料)。 这个是用户通过LDAP 等登录到IDP域后, IDP 给已经登录的用户生成一个SAML Asseration, 这里包括员工的身份信息。 这个信息通过SSL加密传递到SP 后, SP 先验证签名(Sign), 解析出这是一个来自某公司某员工的请求, 要访问它的某个应用程序(Relaystat), SP 会继续把这个要求传递给自己的应用程序, 由它来决定授权。

<Response Destination="<http_protocol>://sp:9031/sp/ACS.saml2" IssueInstant="2011-06-21T18:45:05.541Z" ID="mlFj46Z1ac5.Og0XRUQng9I9PZA" Version="2.0" xmlns="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:ds="<http_protocol>://org/2000/09/xmldsig#">

<saml:Issuer>idp:cloud:saml2</saml:Issuer>

<ds:Signature>

<ds:SignedInfo>

<ds:CanonicalizationMethod Algorithm="<http_protocol>://org/2001/10/xml-exc-c14n#"/>

<ds:SignatureMethod Algorithm="<http_protocol>://org/2000/09/xmldsig#rsa-sha1"/>

<ds:Reference URI="#mlFj46Z1ac5.Og0XRUQng9I9PZA">

<ds:Transforms>

<ds:Transform Algorithm="<http_protocol>://org/2000/09/xmldsig#enveloped-signature"/>

<ds:Transform Algorithm="<http_protocol>://org/2001/10/xml-exc-c14n#"/>

</ds:Transforms>

<ds:DigestMethod Algorithm="<http_protocol>://org/2000/09/xmldsig#sha1"/>

<ds:DigestValue>lhx/bdl8SDvYFlTORdnkMGSn9IE=</ds:DigestValue>

</ds:Reference>

</ds:SignedInfo>

<ds:SignatureValue>ko2nIwlZN4vjtSWWDHwL+eF+uZKyFENdBP7f97jALUIAoWo37hc03koaKo2Q2Dbq7thv+BXVuEPr

FYjhaS8rKUXPhETx4k4GMCEqMCGHuPAX1WanBHp4Pj1AV+WJdlijIalrGQaxRPhxlBGD5iR1i2fm

ca+Kd5eHfuXZOav3lf0=</ds:SignatureValue>

</ds:Signature>

<Status>

<StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>

</Status>

<saml:Assertion Version="2.0" IssueInstant="2011-06-21T18:45:05.619Z" ID="IbDavCE__pPV99SnSP5aFX8ZVtZ">

<saml:Issuer>idp:cloud:saml2</saml:Issuer>

<saml:Subject>

<saml:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">joe</saml:NameID>

<saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">

<saml:SubjectConfirmationData NotOnOrAfter="2011-06-21T18:50:05.619Z" Recipient="<http_protocol>s://sp:9031/sp/ACS.saml2"/>

</saml:SubjectConfirmation>

</saml:Subject>

<saml:Conditions NotOnOrAfter="2011-06-21T18:50:05.619Z" NotBefore="2011-06-21T18:40:05.619Z">

<saml:AudienceRestriction>

<saml:Audience>sp:cloud:saml2</saml:Audience>

</saml:AudienceRestriction>

</saml:Conditions>

<saml:AuthnStatement AuthnInstant="2011-06-21T18:45:05.604Z" SessionIndex="IbDavCE__pPV99SnSP5aFX8ZVtZ">

<saml:AuthnContext>

<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef>

</saml:AuthnContext>

</saml:AuthnStatement>

</saml:Assertion>

</Response>

SP init SSO 与上面非常类似, 除了SP 要发出Authen Request外, SP还要负责维护RelayState,而不是由IDP 来指定。

SAML 可以建立在SOAP上传输,也可以建立在其他协议上传输。

正如样本中提到的, SAML的规范由几个部分构成:SAML Assertion,SAML Prototol,SAML binding等。

5安全编辑

由于SAML在两个拥有共享用户的站点间建立了信任关系,所以安全性是需考虑的一个非常重要的因素。SAML中的安全弱点可能危及用户在目标站点的个人信息。SAML依靠一批制定完善的安全标准,包括SSL和X.509,来保护SAML源站点和目标站点之间通信的安全。源站点和目标站点之间的所有通信都经过了加密。为确保参与SAML交互的双方站点都能验证对方的身份,还使用了证书。

6SAML支持编辑

BEA WebLogic Server 9.0是第一个包含了对SAML支持的WebLogic Server版本。WebLogic Server 9.1中进一步加强了对SAML的支持。WebLogic Server把SAML作为WebLogic Security Service的一部分使用。SAML用来为WebLogic Web services和跨WebLogic域共享验证信息提供SSO支持。除SAML外,WebLogic Server也为Windows桌面SSO支持Simple and Protected Negotiate (SPNEGO)协议。SAML可用来提供访问Web应用程序和Web service的权限。

对于一些应用程序,您仅需付出很少甚至无需付出额外的程序设计努力,就能使用WebLogic Server中的SAML支持。如果用户应用程序使用配置为WebLogic 安全域一部分的安全设置,那么集成SAML是一个首要的系统管理任务。WebLogic server可配置作为SAML源站点或SAML目标站点。要使服务器成为SAML源站点,需配置一个SAML Credential Mapper。要使服务器成为SAML目标站点,需配置一个SAML Identity Asserter.

如果用户应用程序安全模式为与WebLogic Security Service进行交互,包含了自己的特定于WebLogic的代码,可以使用WebLogic的SAML API把该定制扩展到SAML。该API提供对WebLogic SAML服务主要组件的编程式访问。用户可以使用应用程序自身的业务逻辑来扩展诸如SAMLCredentialNameMapper和 SAMLIdentityAssertionNameMapper这样的类。一旦用户有了自己的定制类,WebLogic管理控制台就允许用户配置其 SAML Credential Mapper(源站点)或SAML Identity Asserter(目标站点),以便使用那些类。惟一的要求是用户的定制类需要在系统类路径中,非常类似于WebLogic启动类,这可能对用户部署策略产生影响。

最后,如果应用程序安全模式完全独立于WebLogic Security Service,用户将不能从WebLogic的SAML工具中获益。用户要使其应用程序支持SAML就需要做更多工作,要么实现WebLogic所提供的某些服务的简化版本,要么集成那些服务的第三方版本。但是,用户仍将受益于可在任何J2EE应用服务器或在如Tomcat这样的Java Web服务器应用程序上使用SAML。有商业和开源的SAML支持可供选择。开源的选择中有OpenSAML和相关的Shibboleth项目。 OpenSAML是一个SAML工具包,可用来建立用户自己的SAML源站点和目标站点。Shibboleth更进一步,它提供了一个构建在 OpenSAML之上的“基于SAML 1.1的跨域Web单点登录平台”。SourceID为Java 和.NET中的SAML 1.1提供了一套开源工具包。在Apache项目下没有完整的SAML工具包,但WSS4J项目包含了对OpenSAML的一些支持。

分类: Wiki

时间: 2024-10-29 19:05:52

SAML - SSO(转)的相关文章

基于SAML的单点登录介绍

http://blog.csdn.net/csethcrm/article/details/20694993 一.背景知识: SAML即安全断言标记语言,英文全称是Security Assertion Markup Language.它是一个基于XML的标准,用于在不同的安全域(security domain)之间交换认证和授权数据.在SAML标准定义了身份提供者(identity provider)和服务提供者(service provider),这两者构成了前面所说的不同的安全域. SAML

Confluence 6 数据中心的 SAML 单点登录最佳实践和故障排除

最佳实践 SAML 授权仅仅在有限的时间进行校验.你需要确定运行你的应用的计算机时间与 IdP 的时间是同步的. 如果你应用中的用户和用户组是通过用户目录进行配置的,你通常希望用户来源目录和你的 IdP 和 Atlassian 应用使用相同的 LDAP 目录.用户需要在用户目录支中存在才可以使用 SSO 进行登录. 故障排除 如果你错误的配置了 SAML 收取,或者不能登录到你的 IdP.你可以通过删除请求来让你的登录授权恢复(在你用户目录中为一个管理员用户配置使用一个用户名和密码). curl

基于 Confluence 6 数据中心在你的 Atlassian 应用中配置 SAML 授权

希望在 Confluence 中配置SAML: Go to  > 基本配置(General Configuration) > SAMl 授权(SAML Authentication). 选择 SAML 单点登录(SAML single sign-on). 配置下面的设置: Single sign-on issuer 这个值是是由你 IdP 提供的,作为设置 SAML 的一部分.有时候这个被称为 'Entity ID' 发布者是将会接受授权请求表单的 IdP 应用. Identity provi

基于 Confluence 6 数据中心的 SAML 单点登录设置 SSL/TLS

请确定 SAML 授权是安全和私有的,你需要在你的应用程序中设置SSL/TLS. 请参考in the application. See Running Confluence Over SSL or HTTPS 页面中的内容. 一旦上面的设置完成,你需要确定你的应用程序的 configured base URL 使用的是 HTTPS 协议. 如果你在你的服务器配置上使用了反向代理(reverse proxy),请阅读下面的文章: Proxying Atlassian server applicat

基于 Confluence 6 数据中心的 SAML 单点登录设置你的身份提供者

如果你希望 Confluence 提供 SSO,将需要将 Confluence 添加到你的 IdP 中.一些后续的步骤将会与你的 IdP 有关,但是你通常需要: 在你的 IdP 中定义一个 'application' 提供你应用的一些数据,包括在你授权界面中需要的数据. 请确定你 IdP 中的 NameId 用户设置为你 Atlassian 应用的用户名 在应用中给出正确的用户权限 在设置你 IdP 过程的最后,将会提供一些配置你 Atlassian 应用需要的数据. https://www.c

chrome os系统下载

Chrome OS 稳定版发布更新了,更新至53.0.2785.103(平台版本:8530.81.0),支持除了Google Chromebook Pixel (2015), Acer Chromebook R11, ASUS Chromebook Flip C100PA, HP Chromebox CB1, 和Acer C7 Chromebook的设备(手机app开发ty300.com).此次构建包括大量的 bug 修复,安全更新和功能增强(基础教程qkxue.net),系统会在接下来的几天收

比较SSO协议: WS-Fed, SAML, and OAuth

真实比喻 在我们获得技术之前,让我们用完全非技术性的东西来解决这个问题.作为工程师,我们非常注重将事情分解为组件和流程.这有助于我们了解事情,以便我们可以排除故障或构建复杂的系统.当你去机场登机时,你的登录协议,身份验证协议和令牌类型是什么?这三个组件将成为整个博客的焦点.我将如何定义它们: 什么是登录协议(Sign-in protocol)?去了其中一个值机亭,然后打印我的登机牌,然后通过TSA线,然后去登机口,最后登上飞机.我希望我能以这种方式与机场互动并按顺序执行这些动作,否则,我将无法登

SSO 单点登录解决方案

转自:http://www.blogjava.net/Jack2007/archive/2014/03/11/191795.html 1 什么是单点登陆      单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.      较大的企业内部,一般都有很多的业务支持系统为其提供相应的管理和IT服务.例如财务系统为财务人员提供财务的管理.计算和报表服务:人事系统为人

单点登录 SSO

1 什么是单点登陆       单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.       较大的企业内部,一般都有很多的业务支持系统为其提供相应的管理和IT服务.例如财务系统为财务人员提供财务的管理.计算和报表服务:人事系统为人事部门 提供全公司人员的维护服务:各种业务系统为公司内部不同的业务提供不同的服务等等.这些系统的目的都是让计算机来 进行复杂繁琐的