SAML

From: 云舒

摘要:SAML在国内介绍不多,这里简单描述一下。

WEB系统的登录一般基于cookie或者session(session底层还是需要cookie),在没有cookie的情况下比如WAP网站 则使用伪cookie方式或者伪session方式,这个我在以前的文章《从wap网站的认证授权到csrf的协议类比本质》中略微提到过。对于跨域的 SSO(single sign on)而言,虽然各系统具体实现各异,但是因为跨域不容易传输cookie所以和WAP类似,所以底层依然是伪cookie或者伪session或者类似 的变通方式。在这里我略微说一下SAML(Security Assertion Markup Language),SAML在国内似乎介绍不多,它是用来解决SSO问题的,本质上依旧是类似cookie和session,和传统的SSO相比并没有 很突出的优点。但是它毕竟是一个标准,得到了IBM,Google,Juniper等公司的支持,可以很通用,google apps就支持SAML认证。

SAML使用XML在不同的域之间传输认证和授权信息,这里的信息称为一个SAML断言。断言是可以加密的,以保证不被嗅探攻击。这里的不同域,根据在 SSO中的用途分为认证提供者和服务提供者。显然的,认证提供者提供认证服务并声称SAML断言,而服务提供者提供认证后的应用上的服务,信任SAML断 言。因为使用的XML的方式,所以可以很容易的和Web Service继承,如Sun Java System Access Manager,NetBeans,weblogic等等。

不同的是,在常规的WEB站点中如何在不同的域之间定向传输XML数据?SAML使用了一个很简单但是很不优雅的方式实现的,那就是将XML数据使用 base64编码保存在form表单中,然后使用javascript自动提交form表单。这里的断言包含了一个唯一的浏览器标识,先加密了再 base64编码的,因此无需担心泄密问题。

SAML的具体细节我就不讲了,很简单。比较有意思的地方是SAML不仅实现了常规SSO使用较多伪cookie方式,还实现了伪session方式。实 现的机制是不同的binding方式,POST Binding实现的伪cookie方式,Artifact Binding实现的是伪session方式。POST Binding时所有认证相关数据通过客户端中专,而使用Artifact Binding的时候,AuthnRequest以及响应只是在客户端传输一个引用,而真正的SAML实体则是直接在服务提供者和认证提供者之间传输。

详细的资料,可以看http://en.wikipedia.org/wiki/SAML

相关文章

本文还暂无回复

添加回复

支持 Ctrl+Enter 快速提交