一、SAML简介
SAML是一种基于XML开发的用来在互联网上交换安全信息的框架。SAML1.0规范是由OASIS(Organization for the Advancement of Structured Information Standards)在S2ML 和 AuthML规范的基础上提出的,并得到众多的大公司的支持。
SAML可以实现不同的安全服务系统之间的互操作性,它提供了一种机制使得可以在不同的安全服务系统之间交换认证和授权信息。但它本身并不定义新的认证与授权的机制,它只是定义了用于安全服务之间传输安全信息的交换机制。
二、SOAP API示例
此SOAP API示例来源于统一认证系统的一个对外服务接口,此接口提供的服务功能是:某一纳入统一认证管理的应用系统,向统一认证发出查询请求,用于验证来访用户身份或者权限的有效性。
应用系统方通过Web Services实现向统一认证系统的查询。为了考虑安全性,包括应用系统在统一认证系统中的注册ID及其密码。如果SAML请求使用了数字签名可以不设置密码。
应用系统向统一认证接口发送的SOAP RPC格式为:
<getAuthInfo xmlns="http://library.hj.com/samlserver">
<request>Value_request</request>
<clientId>Value_clientId</clientId>
<pwd>Value_pwd</pwd>
</getAuthInfo>
可见,一共为三个参数,Value_request是一个表示SAML请求的XML文档,Value_clientId是应用系统注册的标识ID,Value_pwd是该应用系统注册时设定的和统一认证系统通信的密码。
三、SAML请求格式
下面列出一个SAML请求的实例:
<Request xmlns="urn:oasis:names:tc:SAML:1.0:protocol"
xmlns:saml= "urn:oasis:names:tc:SAML:1.0:assertion"
xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol" IssueInstant="2003-10-28T09:20:58Z" MajorVersion="1" MinorVersion="0" RequestID="560c2de3-5dea-48c1-9004-6bfaa1daafae">
<AssertionArtifact>5Wc6EEWcegYEK8Gx3AtDA3gPSDOCqBJrj7kaOKsI</AssertionArtifact>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315">
</ds:CanonicalizationMethod>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"></ds:SignatureMethod>
<ds:Reference URI="">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"></ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"></ds:DigestMethod>
<ds:DigestValue>Zwq65AuFt9OuAD/+FeKswAjUgFs=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>n7BLXCt2YEMOmiTqMSQMksrFd+raQZ1jxmW7WIlqgkK05bcigilsvueoRMr64KdTiCsVaYmXI5BLKIN4+T2ZQw==
</ds:SignatureValue>
</ds:Signature>
</Request>
下面分析SAML请求的格式。可以将上述的例子简化为:
<Request>
<AssertionArtifact> </AssertionArtifact>
<ds:Signature> </ds:Signature>
</Request>
可见,上述例子中,<Request>节点主要包含一个< AssertionArtifact >节点,来表示请求目的是对此Artifact的查询。Artifact是一个用户在统一认证系统登录后获取的登录标识Token,此Token是用户访问各应用系统的钥匙。
<ds:Signature>节点是对整个SAML请求部分进行数字签名的,可以看到签名中包括规范化、摘要、签名的算法。<ds:Signature>节点中不包括应用系统方的数字证书,因为该证书应用系统注册时已经上载到统一认证系统。





