一、什么是SAML?
SAML(Security Assertion Markup Language),安全断言标记语言。是一种安全框架或规范,用于认证和授权。形式为XML,内容包括三个方面:
1.认证申明。表明用户是否已经认证,通常用于单点登录。
2.属性申明。
3.授权申明。表明 某个资源的权限。
比如,企业应用要访问某服务,为了保证身份安全,可以采用除了加密签名等措施,还要采用SAML规范来传输,传输的数据以XML形式,内容符合SAML的推荐标准。这样应用和服务各自是什么样的系统没有关系,只要能理解SAML规范即可。
那么,SAML 是否安全,因为内容就是XML?答案是SAML有一定的安全性,虽然是XML格式,但不容易被修改:
首先,SAML虽然形式上是XML,但里面有些值是经过加密的;
其次,SAML基于XML签名规范,即采用XML的语法规则,对数字签名的生成和验证过程进行充分而准确的描述,这个过程包括密钥对生成、文档签名、传送文档及验证签名(有关XML签名,是另外一个课题,需要另行学习。),具有防篡改、不可抵赖等特点。
二、SAML与HTTPS的比较
照我的理解,SAML用于不同系统之间的认证和授权的规范,是应用级别的;而HTTPS则完全就是一种网络安全传输协议,与SAML不是一类东西。如果从安全角度看,HTTPS要强许多。
三、SAML的应用
很明显,SAML与单点登录(SSO)、第三方登录,比如oAuth2这些不同系统之间认证机制有关。
前面提到,SAML里可以包含授权信息。oAuth2带有授权信息,这个比较容易理解,它本来主要目的就是干这个的,比如我想打开某个应用,结果提示可以用微信登录,然后让我同意访问微信的用户名,相册什么的,这里面就包含有授权信息了。
但是,单点登录,需要用这个授权信息吗?
本来,照我一直以来想当然的理解,单点登录系统只管认证就好了,至于权限处理,则完全由应用系统自行处理。不过细想一下,单点登录也提供授权信息也是好事一桩,因为只需在单点登录系统里面维护一份权限数据就行了,各应用系统则不必,一则节省,二则也许权限数据易于在各系统间传递,处理?
姑且理解这么多。
参考资料: