SAML2.0SecurityAssertionMarkupLanguage(SAML)是以XML为基础的,为在安全域间交换认证和授权数据的标准,即在身份提供者(断言的产生者)和服务提供者(断言消费者)间进行交换。SAML是OASISSecurityServicesTechnicalCommittee提出并定为标准的。SAML2.0在2005年3月被批准成为OASIS的标准。SAML2.0的重要方面是他的官方文档#SAMLConform,#SAMLCore,#SAMLBind,和#SAMLProf覆盖了协议的详细细节。如果你初次接触SAML,你应该先阅读SAML主题的介绍,然后从OASIS中阅读#SAMLOverview文档。来自24个企业和组织超过30人参与了SAML2.0的创建。特别值得一提的是,自由联盟把他们的身份联盟框架(ID-FF)捐献给OASIS,ID-FF成为了SAML2.0基础规范。因此SAML2.0代表SAML1.1,自由ID-FF1.2,和Shibboleth1.3的集中。SAML2.0断言SAML断言一个重要的类型被称为“bearer”断言,它被用于帮助Web浏览器的SSO。下面是一个很短活跃周期的bearer断言,他是由身份提供者()发布给服务提供方的断言中包含saml:AuthnStatement和saml:AttributeStatement,假设该断言是服务提供方用来做访问控制决定的。saml:Assertionxmlns:saml=urn:oasis:names:tc:SAML:2.0:assertionxmlns:xs=:xsi==b07b804c-7c29-ea16-7300-4f3d6f7928acVersion=2.0IssueInstant=2004-12-05T09:22:05Zsaml:Issuer:Issuerds:Signaturexmlns:ds=:Signaturesaml:Subjectsaml:NameIDFormat=urn:oasis:names:tc:SAML:2.0:nameid-format:transient3f7b3dcf-1674-4ecd-92c8-1544f346baf8/saml:NameIDsaml:SubjectConfirmationMethod=urn:oasis:names:tc:SAML:2.0:cm:bearersaml:SubjectConfirmationDataInResponseTo=aaf23196-1773-2113-474a-fe114412ab72Recipient==2004-12-05T09:27:05Z//saml:SubjectConfirmation/saml:Subjectsaml:ConditionsNotBefore=2004-12-05T09:17:05ZNotOnOrAfter=2004-12-05T09:27:05Zsaml:AudienceRestrictionsaml:Audience:Audience/saml:AudienceRestriction/saml:Conditionssaml:AuthnStatementAuthnInstant=2004-12-05T09:22:00ZSessionIndex=b07b804c-7c29-ea16-7300-4f3d6f7928acsaml:AuthnContextsaml:AuthnContextClassRefurn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport/saml:AuthnContextClassRef/saml:AuthnContext/saml:AuthnStatementsaml:AttributeStatementsaml:Attributexmlns:x500=urn:oasis:names:tc:SAML:2.0:profiles:attribute:X500x500:Encoding=LDAPNameFormat=urn:oasis:names:tc:SAML:2.0:attrname-format:uriName=urn:oid:1.3.6.1.4.1.5923.1.1.1.1FriendlyName=eduPersonAffiliationsaml:AttributeValuexsi:type=xs:stringmember/saml:AttributeValuesaml:AttributeValuexsi:type=xs:stringstaff/saml:AttributeValue/saml:Attribute/saml:AttributeStatement/saml:Assertion注意saml:Assertion元素包含如下的子元素:saml:Issuer元素,包含了身份提供者的唯一身份。ds:Signature元素,包含了在saml:Assertion元素中完整保存的数字签名.saml:Subject元素,定义了认证过的主体,但是在该实例中,因为保密的原因,主体身份被隐藏在透明的transient标识之后。saml:Conditions元素,给出了断言被认为有效的验证条件。saml:AuthnStatement元素,描述了在身份提供者的认证行为。saml:AttributeStatement元素,声明了认证主体相关的多值属性。通俗的说,断言被编码成如下信息:在时间为2004-12-05T09:22:05Z时,身份提供者()唯一发布了关于主体(3f7b3dcf-1674-4ecd-92c8-1544f346baf8)的断言(b07b804c-7c29-ea16-7300-4f3d6f7928ac),发送给服务提供方()。特殊说明的是,认证声明说明如下信息:包含在saml:subject中的认证过的主体元素,在时间“2004-12-05T09:22:00Z”被认证,也就是说密码通过受保护的通道被发送过来。同样,属性声明陈述为:在saml:Subject元素中的被验证的主体在一个机构中的工作人员。SAML2.0协议在#SAMLCore中制定了如下协议:断言查询和请求协议#AuthenticationRequestProtocol认证请求协议#ArtifactResolutionProtocolartifact解决协议命名身份管理协议单点退出协议命名身份映射协议这些协议中最重要的协议,认证请求协议,在下面讲详细讨论。认证请求协议记得SAML1.1的WebBrowserSSOProfiles是idp初始化的,也就是说,一个未经同意的samlp:Response元素通过浏览器从身份提供方传递到服务提供方。在SAML2.0里,流程从服务提供方开始,服务提供方发布一个详细的认证请求到身份提供方。因此,AuthenticationRequestProtocol是SAML2.0的一个重要的新特性。当一个主体或者代表主体的实体,希望获得包含认证声明时,samlp:AuthRequest元素需要被传输到身份提供方。samlp:AuthnRequestxmlns:samlp=urn:oasis:names:tc:SAML:2.0:protocolxmlns:saml=urn:oasis:names:tc:SAML:2.0:assertionID=aaf23196-1773-2113-474a-fe114412ab72Version=2.0IssueInstant=2004-12-05T09:21:59ZAssertionConsumerServiceIndex=0AttributeConsumingServiceIndex=0saml:Issuer:Issuersamlp:NameIDPolicyAllowCreate=trueFormat=urn:oasis:names:tc:SAML:2.0:nameid-format:transient//samlp:AuthnRequest上面的samlp:AuthnRequest元素,暗中还请求了包含认证声明的断言,很显然是由服务提供方发布,随后通过浏览器传给身份提供方。身份提供方认证主体,并且发布认证响应,通过浏览器传输回服务提供方。ArtifactResolutionProtocolSAML消息通过值或者值引用从一个实体传到另一个实体。对SAML消息的引用被成为artifact。Artifact的接受者,通过直接发送samlp:ArtifactResolve请求到artifact的发布者来处理引用,然后发布者响应由artifact引用的真实的消息。例如,假设身份提供方通过后台通道直接发送如下的samlp:ArtifactResolve请求到服务提供方:samlp:ArtifactResolvexmlns:samlp=urn:oasis:names:tc:SAML:2.0:protocolxmlns:saml=urn:oasis:names:tc:SAML:2.0:assertionID=_cce4ee769ed970b501d680f697989d14Version=2.0IssueInstant=2004-12-05T09:21:58ZDestination=:Issuer:Issuerds:Signaturexmlns:ds=:Signaturesamlp:ArtifactAAQAAMh48/1oXIM+sDo7Dh2qMp1HM4IF5DaRNmDj6RdUmllwn9jJHyEgIi8=/samlp:Artifact/samlp:ArtifactResolve作为响应,服务提供方附上artifact返回SAML元素。该协议格式就是HTTPArtifactBinding基础。SAML2.0绑定SAML2.0支持的绑定有如下的绑定规范:SAMLSOAP绑定(基于SOAP1.1)反SOAP绑定(PAOS);HTTP重定向绑定(GET);HTTPPOST绑定;SAMLURI绑定。对于Web浏览器的SSO,最常用的属于HTTPPOST绑定。不管是服务提供方还是身份提供方使用HTTPPOST来传输协议消息,一个实体的绑定选择是和其伙伴的绑定选择是独立的。例