原文:SAML: It’s not just for web service
作者:Frank Teti
出处:http://www.theserverside.com/tt/articles/article.tss?l=SAML-NotJustforWebServices/
引言
SAML(Security Assertion Markup Language,安全断言标记语言)是一个基于XML的标准,用于在安全领域之间交换认证和授权数据。SAML是OASIS安全服务技术委员会(OASIS Security Services Technical Committee)的一个产品。创建SAML以便解决的唯一一个最重要的问题是Web浏览器的单点登录(Single Sign-On)问题,不过,就这一目的来说,SAML存在着一些局限性,事实上,通过把SAML作为WS-Security令牌(token)来使用,其更有效地解决了SOAP Web service的身份验证和授权这一问题。在一些有用的技术上会发现其有价值的方面并会找到一些满足广阔技术前景的事先未料到的方法,例如,Kerberos原来是命运多舛的DCE(Distributed Computing Environment,分布式计算环境)的组成部分,不过显然DCE已被废弃有很长一段时间,Kerberos则已经成为了Microsoft的核心安全组件。
SAML 2确实是包括了一些功能,这些功能解决了一些在使用Web浏览器时出现的多站点验证问题。目前,许多组织就是否照旧使用1.1版本还是迁移到2.0版本而正处在SAML的“犹豫不决地带”中。
最近在为一个涉及使用SAML作为SSO以保障门户应用和相关Web应用安全的项目做准备时,在与客户接洽之前,我做了通常会做的事情——向我个人的专家名单中的专家发送电子邮件并进行了基于SAML的搜索,之后有一件事情立刻变得显而易见,即关于这一主题缺乏实质性的文档。
调查结果、结论和建议
有多人曾推荐Vikrant Sawant在http://www.oracle.com/technology/pub/articles/dev2arch/2006/12/sso-with-saml.html上的这篇文章“在WebLogic Server 9.2中使用SAML配置单点登录(Configuring Single Sign-On using SAML in WebLogic Server 9.2)”,尽管这篇文章是有些过时,但其就这一有些晦涩难懂的技术领域来说仍然是开创性的贡献,我第一次读到它是在一年半之前,当时我正在实施一个在SOA环境内部使用SAML实现SSO的项目。
虽然可把本文当作是SAML的“hello world”实例介绍,不过基于以下原因,它并没有提供用于现实世界实现的指导:
Oracle WebLogic实例被当作IdP(Identity Provider,身份提供者)使用,而不是作为更加企业级的访问管理应用。
本地的LDAP实例既可用于IdP,也适用于相对于“虚拟用户”的服务提供者(Service Provider,SP)。
由此产生的SAML断言并不包括“Groups”属性,其需要提供RBAC(Role-based Access Control,基于角色的访问控制);
问题检测不仅仅只包括源和目标服务器的日志分析,以及启用应用服务器调试和SQML信息过滤。
可信合作伙伴的密钥和证书配置不仅只是需要配置一个私钥。
在独立的环境而不是在有集群意识的、生产类的环境中配置安全模型。
本文的目的是提供一个视角以便深入了解,如何架构和实现作为企业范围内的平台的SAML安全。
一个企业级的IdP
使用Oracle WebLogic作为IdP显然是可行的,但是它不具备诸如Sun Access Manager、Tivoli Access Manager、Oracle Access Manager等一类的真实的访问管理环境所需的功能。使用Oracle WebLogic Server作为IdP并不提供会话管理功能,该功能类似于比如Sun Access Manager所提供的。由众多厂商支持的SAML则提供了一个超越了内联网SSO的解决方案。图1描述了一个供参考的系统结构,使用了
Sun Access Manager 7.1作为IdP,以及;
WebLogic Server 10.3作为SP。
图1:概念性的SAML架构——其中包括LDAP储存库
虽然许多IdP厂商既支持格式也支持协议,然而由于各厂商的实现不同,并且在实现中包括了他们自己的内部构造,因此配置SAML某些程度上变成了一种映射练习。因为Oracle收购了Sun,所以Sun Access Manager是否退役以有利于Oracle Access Manager,这还有待观察,Oracle Access Manager本身也是Oracle收购得来的,其之前被称为Oblix。虽然一些SAML感知的技术保证说,在Sun Access Manager内部用SAML实现IdP就类似于在WebLogic内部用SAML实现IdP,但可以这么说,配置并不像我所预期的那样对称。
图2:用于SAML的可信合作伙伴配置的Sun Access Manager 7.1控制台视图
Sun Access Manager Source ID属于不透明的数据类型SHA1,使用Base64编码的字符串“protocol://hostname:port(协议://主机名:端口)”来表示,这是SP站点的地址,尽管SP并不需要知晓这一ID。更具体一点来说,可信合作伙伴配置窗口捕捉了以下信息:
屏幕文字/参数
|
值
|
源ID(Source ID)
|
编码,唯一的可信合作伙伴的ID
|
目标(Target)
|
SP所在的主机名和端口
|
投递URL(Post URL)
|
断言消费者Servlet(Assertion Consumer Servlet),用作SP的WebLogic ITS(Inter-site Transfer Service,站点间传输服务)的组成部分,其还可以通过SSL来访问。
|
站点属性映射器(Site Attribute Mapper)
|
在IdP内部使用,格式化SP SAML断言命名空间的XML元素
|
名称标识映射器(Name Identity Mapper)
|
在IdP内部使用,格式化SP SAML断言名称标识符的XML元素
|
版本(Version)
|
SAML 1.1
|
IdP和SP用户储存库
在SAML身份验证模型中,IdP需要一个本地的储存库作为已验证身份的用户的“记录系统”,通常情况下,用户会被放置在本地的LDAP储存库中,相应地,在调用SP中的受保护资源时,SP可以使用同一个本地LDAP储存库来验证用户。然而,虽然这种模式可能适合于内联网应用,但对于跨网站、互联网应用和事实上并没有采用SAML SSO断言模型等情况来说这种做法都是不可行的。
另一种选择是,SP可以被配置成使用“虚拟用户”。图3展示了在WebLogic控制台中创建断言方(asserting party)以支持虚拟用户的窗口,这一可选的SP配置选项允许SAML身份断言器(SAML Identity Asserter)基于传入的断言实例化用户和组主体(Principal)。该配置还要求为安全领域配置一个SAML身份验证提供程序,这一配置使得用户能够登录为虚拟用户——该用户不对应于任何本地已知的用户。
图3:用于创建断言方的WebLogic Server 10.3控制台视图
具体来说,创建断言方窗口捕捉了以下信息:
屏幕文字/参数
|
值
|
发出者URI(Issuer URI)
|
SAML断言发出者的URI
|
签名要求(Signature Require)
|
如果证书已签名,这一可选属性可设置为true
|
处理组信息(Process Groups)
|
解析并存储SAML断言的组属性到SP的JAAS对象中
|
允许虚拟用户(Allow Virtual Users)
|
信任传入的所有认证和授权(组)信息断言的身份
|
[译文]SAML:不仅仅适用于web service(一)
- 大小: 15.4 KB
- 大小: 25.2 KB
- 大小: 15.2 KB
分享到:
相关推荐
4、SAML:集中身份管理的秘诀 5、SAML:企业级的IdP 6、SAML:IdP和SP用户存储库 7、XML安全:使用SAML确保可移植的信任 8、揭开SAML的神秘面纱 9、安全地共享数字身份信息(一) 10、安全地共享数字身份信息(二) 11、...
下面展示了一个典型的 bearer 断言示例,其中包含了 `<saml:AuthnStatement>` 和 `<saml:AttributeStatement>` 元素。这个例子中,身份提供者(https://idp.example.org/SAML2)向服务提供者...
<saml:NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"> 3f7b3dcf-1674-4ecd-92c8-1544f346baf8 </saml:NameID> <saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:...
OmniAuth SAML 下提供了适用于OmniAuth的通用SAML策略要求 1.3+ Ruby 2.4.x +版本控制我们根据原则标记和发布宝石。 除了语义版本控制准则之外,我们还遵循另一条准则,即出于安全原因向后兼容的依赖项升级通常应...
该软件包仅提供两个功能:一个用于接受SAML登录,另一个用于将Identity Provider元数据解析为有用的信息。 不假定您的应用程序如何工作。 SAML是旧的但重要的协议。 您不想将SAML放在应用程序中的任何地方。 相反,...
对于部署到同一个 Jetty 实例的多个 Web 应用程序,提供了一个占位符 SAML servlet。 选择应用程序并单击底部的端点按钮。 观察联合元数据和 SAML-P URL。 码头设置 将 jar 文件放在 Jetty 服务器类路径
适用于Web开发人员的SAML 有兴趣在您的应用中添加SAML(安全断言标记语言)支持吗? 这篇文章解释了Web应用程序的基本单点登录流程。 如果您有任何疑问或反馈,请。好处通过SAML,您可以跨多个应用程序管理用户身份...
SpringSAML Spring SAML Extension允许在Spring应用程序中无缝包含SAML 2.0 Service Provider功能。 可以使用在身份提供者模式下支持SAML 2.0的所有产品(例如ADFS 2.0,Shibboleth,OpenAM / OpenSSO,Ping ...
如果将requestId提供给验证器,但此版本也将拒绝SAMLResponse,但SAMLResponse不包含InResponseTo属性。 默认情况下禁用的附加设置参数“ destinationStrictlyMatches”将强制目标URL严格匹配处理SAMLResponse的...
该框架是为实现安全、标准化的身份验证与授权机制而设计的,特别适用于跨组织或跨域的用户身份管理。通过整合SAML2标准,这一框架为开发者提供了创建高度可扩展且安全的服务提供者网站的能力,同时支持与第三方身份...
《学习SAML:身份验证与单点登录的基石》 SAML(Security Assertion Markup Language,安全断言标记语言)是一种开放标准,用于在不同的信任域之间交换身份验证和授权数据。它在现代Web应用程序和企业级系统中扮演...
OneLogin的SAML Java工具包 使用此库将SAML支持添加到Java应用程序。 忘记那些复杂的库,而使用... SAML是用于Web浏览器单点登录的基于XML的标准,由OASIS安全服务技术委员会定义。 该标准自2002年以来一直存在,但近
节点saml 创建SAML断言。 支持SAML 1.1和SAML 2.0令牌。 用法 var saml = require ( 'saml' ) . Saml20 ; // or Saml11 var options = { cert : fs . readFileSync ( __dirname + '/test-auth0.pem' ) , key : fs...
护照-SAML 这是的身份验证提供程序,Node.js 身份验证库。 该代码最初基于 Michael Bosworth 的库。 Passport-SAML 已经过测试,可以与 Onelogin、Okta、Shibboleth、基于的身份提供程序以及。 安装 $ npm ...
总结来说,SAML2.0是一种强大而灵活的工具,解决了Web应用中的身份验证和授权问题,促进了跨系统的安全数据交换,提升了用户体验。随着数字化程度的加深,SAML2.0的重要性日益凸显,成为了现代网络环境中不可或缺的...
这一规范被广泛应用于网络身份管理,特别是在单点登录(Single Sign-On,SSO)场景中。SAML 2.0的核心协议规范,即saml-core-2.0-os,定义了XML编码的断言以及传递这些信息的协议。 SAML 2.0的核心协议规范主要包含...
OneLogin的SAML Python工具包 Python 2 was deprecated on January 1, 2020. We recommend to migrate your projectto Python 3 and use python3-saml使用此库将SAML支持添加到您的Python软件中。 忘记那些复杂的库...
Redmine OmniAuth SAML插件 该插件基于为基于添加了SAML身份验证支持。 要求 Redmine >= 4.1.0 Ruby>= 2.4.10 Redmine插件: 正在安装 您可以先在查看插件的一般说明。 cd $REDMINE git clone ...
**SAML2.0全称Security Assertion Markup Language 2.0,是一种基于XML的协议,用于在不同的安全域之间交换身份验证和授权数据。它在单点登录(Single Sign-On, SSO)场景中扮演了核心角色,允许用户通过一次登录...
Rack :: SAML,SAML(Shibboleth)SP Rack中间件 这个项目的灵感来自Rack-Shibboleth和ruby-saml。 从安全性或功能性方面,建议使用事实上的SAML实现,例如OpenSAML。 但是,对于由Ruby实现的轻量级应用程序,也...