还剩20页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
SAML
2.0SecurityAssertion__rkupLanguageSAML是以XML为基础的,为在安全域间交换认证和授权数据的标准,即在身份提供者(断言的产生者)和服务提供者(断言消费者)间进行交换SAML是OASISSecurityServi__sTechnicalCommittee提出并定为标准的SAML
2.0在2005年3月被批准成为OASIS的标准SAML
2.0的重要方面是他的__文档#SAMLConform#SAMLCore#SAMLBind和#SAMLProf覆盖了协议的详细细节如果你初次接触SAML,你应该先阅读SAML主题的介绍,然后从OASIS中阅读#SAMLOverview文档来自24个企业和组织超过30人参与了SAML
2.0的创建特别值得一提的是,自由联盟把他们的身份联盟框架(ID-FF)捐献给OASIS,ID-FF成为了SAML
2.0基础规范因此SAML
2.0代表SAML
1.1,自由ID-FF
1.2,和Shibboleth
1.3的集中SAML
2.0断言SAML断言一个重要的类型被称为“bearer”断言,它被用于帮助Web浏览器的SSO下面是一个很短活跃周期的bearer断言,他是由身份提供者(https://idp.example.org/SAML2)发布给服务提供方的https://sp.example.com/SAML
2.断言中包含saml:AuthnStatement和saml:AttributeStatement假设该断言是服务提供方用来做访问控制决定的saml:Assertionxmlns:saml=urn:oasis:names:tc:SAML:
2.0:assertionxmlns:xs=http://___.w
3.org/2001/XMLSche__xmlns:xsi=http://___.w
3.org/2001/XMLSche__-instan__ID=b07b804c-7c29-ea16-7300-4f3d6f7928acVersion=
2.0IssueInstant=2004-12-05T09:22:05Zsaml:Issuerhttps://idp.example.org/SAML2/saml:Issuerds:Signaturexmlns:ds=http://___.w
3.org/2000/09/xmldsig#.../ds:Signaturesaml:Su__ectsaml:NameIDFor__t=urn:oasis:names:tc:SAML:
2.0:nameid-for__t:transient3f7b3dcf-1674-4ecd-92c8-1544f346baf8/saml:NameIDsaml:Su__ectConfir__tionMethod=urn:oasis:names:tc:SAML:
2.0:cm:bearersaml:Su__ectConfir__tionDataInResponseTo=aaf23196-1773-2113-474a-fe___412ab72Recipient=https://sp.example.com/SAML2/SSO/POSTNotOnOrAfter=2004-12-05T09:27:05Z//saml:Su__ectConfir__tion/saml:Su__ectsaml:ConditionsNotBefore=2004-12-05T09:17:05ZNotOnOrAfter=2004-12-05T09:27:05Zsaml:Au___n__Restrictionsaml:Au___n__https://sp.example.com/SAML2/saml:Au___n__/saml:Au___n__Restriction/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=LDAPNameFor__t=urn:oasis:names:tc:SAML:
2.0:attrname-for__t: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:Su__ect元素,定义了认证过的主体,但是在该实例中,因为保密的原因,主体身份被隐藏在透明的transient标识之后saml:Conditions元素,给出了断言被认为有效的验证条件saml:AuthnStatement元素,描述了在身份提供者的认证行为saml:AttributeStatement元素,声明了认证主体相关的多值属性通俗的说,断言被编码成如下信息在时间为2004-12-05T09:22:05Z时身份提供者(https://idp.example.org/SAML2)唯一发布了关于主体(3f7b3dcf-1674-4ecd-92c8-1544f346baf8)的断言b07b804c-7c29-ea16-7300-4f3d6f7928ac,发送给服务提供方(https://sp.example.cin/SAML2)特殊说明的是,认证声明说明如下信息包含在saml:su__ect中的认证过的主体元素,在时间“2004-12-05T09:22:00Z”被认证,也就是说__通过受保护的通道被发送过来同样,属性声明陈述为在saml:Su__ect元素中的被验证的主体在一个机构中的工作人员SAML
2.0协议在#SAMLCore中制定了如下协议断言查询和请求协议#AuthenticationRequestProtocol认证请求协议#ArtifactResolutionProtocolartifact解决协议命名身份管理协议单点退出协议命名身份映射协议这些协议中最重要的协议,认证请求协议,在下面讲详细讨论认证请求协议记得SAML
1.1的WebBrowserSSOProfiles是idp初始化的,也就是说,一个未经同意的samlp:Response元素通过浏览器从身份提供方传递到服务提供方在SAML
2.0里,流程从服务提供方开始,服务提供方发布一个详细的认证请求到身份提供方因此,AuthenticationRequestProtocol是SAML
2.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-fe___412ab72Version=
2.0IssueInstant=2004-12-05T09:21:59ZAssertionConsumerServi__Index=0AttributeConsumingServi__Index=0saml:Issuerhttps://sp.example.com/SAML2/saml:Issuersamlp:NameIDPolicyAllowCreate=trueFor__t=urn:oasis:names:tc:SAML:
2.0:nameid-for__t:transient//samlp:AuthnRequest上面的samlp:AuthnRequest元素,暗中还请求了包含认证声明的断言,很显然是由服务提供方https://sp.example.com/SAML2发布,随后通过浏览器传给身份提供方身份提供方认证主体,并且发布认证响应,通过浏览器传输回服务提供方ArtifactResolutionProtocolSAML消息通过值或者值引用从一个实体传到另一个实体对SAML消息的引用被成为artifactArtifact的接受者,通过直接发送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=_c__4ee769ed970b501d680f6979__d14Version=
2.0IssueInstant=2004-12-05T09:21:58ZDestination=https://sp.example.com/SAML2/ArtifactResolutionsaml:Issuerhttps://idp.example.org/SAML2/saml:Issuerds:Signaturexmlns:ds=http://___.w
3.org/2000/09/xmldsig#.../ds:Signaturesamlp:ArtifactAAQAAMh48/1oXIM+sDo7Dh2qMp1HM4IF5DaR__Dj6RdUmllwn9jJHyEgIi8=/samlp:Artifact/samlp:ArtifactResolve作为响应,服务提供方附上artifact返回SAML元素该协议格式就是HTTPArtifactBinding基础SAML
2.0绑定SAML
2.0支持的绑定有如下的绑定规范SAMLSOAP绑定(基于SOAP
1.1)反SOAP绑定(PAOS);HTTP重定向绑定(GET);HTTPPOST绑定;SAMLURI绑定对于Web浏览器的SSO,最常用的属于HTTPPOST绑定不管是服务提供方还是身份提供方使用HTTPPOST来传输协议消息,一个实体的绑定选择是和其伙伴的绑定选择是__的例如,服务提供方可能使用HTTPPOST绑定,然而身份提供方使用的是HTTPArtifactHTTPPOSTBinding在下属的例子中,服务提供方和身份提供方都使用HTTPPOST绑定最初,服务提供方响应包含了一个XHTML格式文档的用户代理请求formmethod=postaction=https://idp.example.org/SAML2/SSO/POST...inputtype=hiddenname=SAMLRequestvalue=request/...inputtype=submitvalue=Submit//formSAMLRequest参数的值是经过64位编码的samlp:AuthnRequest元素,通过浏览器传输到身份提供者身份提供方的SSO服务验证请求的有效性,并通过另一个XHTML格式的文档响应formmethod=postaction=https://sp.example.com/SAML2/SSO/POST...inputtype=hiddenname=SAMLResponsevalue=response/...inputtype=submitvalue=Submit//formSAMLResponse参数的值是经过64位编码的samlp:AuthnRequest元素,并通过浏览器传输给服务提供方为了自动提交该form,下述的j__ascript可以出现在Xhtml页面的任意位置window.onload=function{document.forms
[0].submit;}假设页面里只有一个单个form元素HTTPArtifactBindingHTTPArtifactBinding使用ArtifactResolutionProtocol和HTTP之上的SOAP绑定根据引用来处理SAML消息参考如下具体的例子假设服务提供方发送samlp:AuthRequest消息到身份提供方开始,服务提供方通过Http重定向传给一个artifact到身份提供者https://idp.example.org/SAML2/SSO/ArtifactSAMLart=artifact然后,身份提供方通过后台通道直接发送samlp:ArtifactResolve请求到服务提供方最后,服务提供方返回相关samlp:AuthnRequest消息的samlp:ArtifactResponse元素samlp:ArtifactResponsexmlns:samlp=urn:oasis:names:tc:SAML:
2.0:protocolID=_d84a49e5958803dedcff4c984c2b0d95InResponseTo=_c__4ee769ed970b501d680f6979__d14Version=
2.0IssueInstant=2004-12-05T09:21:59Zds:Signaturexmlns:ds=http://___.w
3.org/2000/09/xmldsig#.../ds:Signaturesamlp:Statussamlp:StatusCodeValue=urn:oasis:names:tc:SAML:
2.0:status:Suc__ss//samlp:Statussamlp:AuthnRequestxmlns:samlp=urn:oasis:names:tc:SAML:
2.0:protocolxmlns:saml=urn:oasis:names:tc:SAML:
2.0:assertionID=_306f8ec5b618f361c70b6ffb1480eadeVersion=
2.0IssueInstant=2004-12-05T09:21:59ZDestination=https://idp.example.org/SAML2/SSO/ArtifactProtocolBinding=urn:oasis:names:tc:SAML:
2.0:bindings:HTTP-ArtifactAssertionConsumerServi__URL=https://sp.example.com/SAML2/SSO/Artifactsaml:Issuerhttps://sp.example.com/SAML2/saml:Issuersamlp:NameIDPolicyAllowCreate=falseFor__t=urn:oasis:names:tc:SAML:
1.1:nameid-for__t:e__ilAddress//samlp:AuthnRequest/samlp:ArtifactResponse当然,该流程也可以转向其他流程,也就是说,身份提供方可能发布一个artifact查看后面的“doubleartifact“profile例子Artifact格式化一般来说,SAML
2.0artifact定义如下 SAML_artifact:=B64TypeCodeEndpointIndexRe__iningArtifactTypeCode:=Byte1Byte2 EndpointIndex:=Byte1Byte2 因此SAML
2.0artifact包含3个组件一个双字节TypeCode,一个双字节EndpointIndex,和一个被称为Re__inArtifact的任意序列字节这3部分信息被结合,并且经过64位编码来生成完成的artifactTypeCode唯一确定了artifact格式SAML
2.0预先定义了一个如下artifact,类型为0x
0004.EndpointIndex是一个特殊artifact解决终点,是由artifactissuer管理的(该发行者可能是IDP,也可是SP)Re__inArtifact,由类型定义决定,是artifact的内容类型为0x0004的artifact格式有如下跟如定义TypeCode:=0x0004Re__iningArtifact:=Sour__IdMessageHandleSour__Id:=20-byte_sequen__MessageHandle:=20-byte_sequen__因此类型为0x0004的未编码的artifact是大小为44位的字节Sour__ID是一个无序字节,但是在实际应用中,Sour__ID是发布者实体ID经过SHA-1算法哈希的值messageHandle是一个随机序列,他是artifact发布者将要按照要求处理的SAML消息的引用例如,考虑如下类型为0x0004的artifact的哈希编码00040000c878f3fd685c833eb03a__0e1daa329d47338205e436913660e3e917549a59709fd8c91f2120222f详细查看会发现在该artifact的前端包含了TypeCode为0x0004和EndpointIndex为0x
0000.剩余的20个字节是发布者的实体ID(https://idp.example.org/SAML2)和20个随机字节的SHA-1哈希值对该44位字节进行64位编码的例子请参照上面的参照ArtifactResolveRequestSAML
2.0Profiles和SAML
1.1一样,在SAML
2.0中最重要的用例依然是Web浏览器的单点登录,但是SAML
2.0的范围比前一个版本更广,如下详细列表SSOProfiles#WebBrowser的SSOProfile;#Enhan__dClientorProxyECPprofile,增强型客户端的Profile;#IdentityproviderDiscoveryProfile身份提供者发现Profile;#SingleLogoutProfile单点退出Profile;#NameIdentifier__nagementProfile命名身份管理ProfileArtifactResolutionProfileArtifact处理profile.AssertionQuery/RequestProfile,断言查询/请求ProfileNameIdentifier__ppingProfile命名身份映射ProfileSAMLAttributeProfiles,SAML属性ProfileBasicAttributeProfile,基础的属性ProfileX.500/LDAPAttributeProfile,X.500/LDAP属性ProfileUUIDAttributeProfile,UUID属性ProfileD__PACAttributeProfile,D__PACA属性ProfileXACMLAttributeProfile,XACML属性Profile尽管SAML支持的profiles很多,很大,但是因为profile的每一个绑定部分都被提取出单独的绑定规范,Profiles规范已经被简化Web浏览器的单点登录ProfileSAML
2.0指定了包含IDP,SP和使用HTTP用户代理的主体的Web浏览器的SSOProfileSP有4种绑定方式可以选择,而IDP有3种绑定方式来选择,因此在每个场景中可以有12中可能的发布情形下面我们简述两种发布场景SPPOST请求;IDPPOST响应Web浏览器中SP和IDP都是用HTTPPOST绑定方式,在SAML
2.0这是一种相对简单的__方式该消息流开始于SP端的对安全资源的请求
1、SP端请求目标资源通过HTTP用户代理,主体请求在服务提供方请求一个安全资源https://sp.example.com/myresour__服务提供方代表目标资源进行安全检查如果SP端存在有效的安全上下文,跳过步骤2-
7.
2、XHTML方式的响应服务提供方响应了一个包含XHTML格式的文档formmethod=postaction=https://idp.example.org/SAML2/SSO/POST...inputtype=hiddenname=SAMLRequestvalue=request/inputtype=hiddenname=RelayStatevalue=token/...inputtype=submitvalue=Submit//formRelayState标志是SP端的对状态信息保持的不透明引用SAMLRequest参数是如下samlp:AuthnRequest元素的64位编码值samlp:AuthnRequestxmlns:samlp=urn:oasis:names:tc:SAML:
2.0:protocolxmlns:saml=urn:oasis:names:tc:SAML:
2.0:assertionID=identifier_1Version=
2.0IssueInstant=2004-12-05T09:21:59ZAssertionConsumerServi__Index=0saml:Issuerhttps://sp.example.com/SAML2/saml:Issuersamlp:NameIDPolicyAllowCreate=trueFor__t=urn:oasis:names:tc:SAML:
2.0:nameid-for__t:transient//samlp:AuthnRequest在samlp:AuthnRequest元素是经过URL编码的,__入搭配XHTML表单中之前,他首先被压缩deflated,并且按照顺序进行64位编码
3、请求IDP端SSO服务的请求用户代理发布POST请求给IDP端的SSO服务POST/SAML2/SSO/POSTHTTP/
1.1Host:idp.example.orgContent-Type:application/x-___-form-urlencodedContent-Length:nnnSAMLRequest=requestRelayState=tokenSAMLRequest和RelayState参数值在第2步被加入到XHTML表单中SSO服务处理samlp:AuthnRequest元素(按照顺序通过URL解码,64位解码拆分请求),并且进行安全检查如果用户没有有效的安全上下文,身份提供方对用户进行验证
4、XHTML表单响应SSO服务验证请求的有效性,并响应包含如下XHTML表单的文档formmethod=postaction=https://sp.example.com/SAML2/SSO/POST...inputtype=hiddenname=SAMLResponsevalue=response/inputtype=hiddenname=RelayStatevalue=token/...inputtype=submitvalue=Submit//formRelayState参数在第3步骤已经进行介绍SAMLResponse参数是进过64位编码的如下samlp:Response元素samlp:Responsexmlns:samlp=urn:oasis:names:tc:SAML:
2.0:protocolxmlns:saml=urn:oasis:names:tc:SAML:
2.0:assertionID=identifier_2InResponseTo=identifier_1Version=
2.0IssueInstant=2004-12-05T09:22:05ZDestination=https://sp.example.com/SAML2/SSO/POSTsaml:Issuerhttps://idp.example.org/SAML2/saml:Issuersamlp:Statussamlp:StatusCodeValue=urn:oasis:names:tc:SAML:
2.0:status:Suc__ss//samlp:Statussaml:Assertionxmlns:saml=urn:oasis:names:tc:SAML:
2.0:assertionID=identifier_3Version=
2.0IssueInstant=2004-12-05T09:22:05Zsaml:Issuerhttps://idp.example.org/SAML2/saml:Issuerds:Signaturexmlns:ds=http://___.w
3.org/2000/09/xmldsig#.../ds:Signaturesaml:Su__ectsaml:NameIDFor__t=urn:oasis:names:tc:SAML:
2.0:nameid-for__t:transient3f7b3dcf-1674-4ecd-92c8-1544f346baf8/saml:NameIDsaml:Su__ectConfir__tionMethod=urn:oasis:names:tc:SAML:
2.0:cm:bearersaml:Su__ectConfir__tionDataInResponseTo=identifier_1Recipient=https://sp.example.com/SAML2/SSO/POSTNotOnOrAfter=2004-12-05T09:27:05Z//saml:Su__ectConfir__tion/saml:Su__ectsaml:ConditionsNotBefore=2004-12-05T09:17:05ZNotOnOrAfter=2004-12-05T09:27:05Zsaml:Au___n__Restrictionsaml:Au___n__https://sp.example.com/SAML2/saml:Au___n__/saml:Au___n__Restriction/saml:Conditionssaml:AuthnStatementAuthnInstant=2004-12-05T09:22:00ZSessionIndex=identifier_3saml:AuthnContextsaml:AuthnContextClassRefurn:oasis:names:tc:SAML:
2.0:ac:classes:PasswordProtectedTransport/saml:AuthnContextClassRef/saml:AuthnContext/saml:AuthnStatement/saml:Assertion/samlp:Response
5、请求SP端的断言消费服务用户代理发布POST请求到SP端的断言消费服务POST/SAML2/SSO/POSTHTTP/
1.1Host:sp.example.comContent-Type:application/x-___-form-urlencodedContent-Length:nnnSAMLResponse=responseRelayState=token其中SAMLResponse和RelayState参数在第4步已经被加载到XHTML表单
6、重定向到目标资源断言消费服务处理响应,在SP端创建安全上下文,并通过用户代理重定向到目标资源
7、再次请求SP边的目标资源用户代理再次请求SP段的目标资源https://sp.example.com/myresour__
8、响应请求的资源因为安全上下文已经建立,服务提供方返回资源到用户代理SP重定向Artifact,IDP重定向Artifact在Web浏览器SSOProfile中SP和IDP都使用HTTPArtifact绑定,是在SAML
2.0中的一个复杂的实现两者artifacts分别通过HTTPGET方式传递给各自的端点消息流开始于SP端的安全资源请求
1、请求SP端的目标资源通过HTTP用户代理,主体请求服务提供方的目标资源https://sp.example.com/myresour__服务提供方代表目标资源进行安全检查如果在SP端存在有效的安全资源上下文,跳过2-
11.
2、重定向到IDP端的单点登录服务服务提供方通过用户代理转向到身份提供方的单点登录服务RelayState参数和SAMLart参数同URL一同传给IDP;
3、请求IDP端的单点登录服务用户代理请求idp端的单点登录服务https://idp.example.org/SAML2/SSO/ArtifactSAMLart=artifact_1RelayState=token其中token是服务提供方状态信息的不透明引用,artifact_1是一个SAMLartifact,这两个信息是在第2步产生的
4、请求SP端的ArtifactResolutionServi__通过发送绑定到SAMLSOAP消息的samlp:ArtifactResolve元素到服务提供方的artifactresolution服务,SSO服务会再次引用artifactsamlp:ArtifactResolvexmlns:samlp=urn:oasis:names:tc:SAML:
2.0:protocolxmlns:saml=urn:oasis:names:tc:SAML:
2.0:assertionID=identifier_1Version=
2.0IssueInstant=2004-12-05T09:21:58ZDestination=https://sp.example.com/SAML2/ArtifactResolutionsaml:Issuerhttps://idp.example.org/SAML2/saml:Issuerds:Signaturexmlns:ds=http://___.w
3.org/2000/09/xmldsig#.../ds:Signaturesamlp:Artifactartifact_1/samlp:Artifact/samlp:ArtifactResolve其中samlp:Artifact元素中的值是在第3步产生的SAMLartifact
5、响应SAMLAuthRequest服务提供方的artifactResolution服务返回一个包含samlp:AuthnRequest的samlp:ArtifactResponse元素,该元素绑定到SAMLSOAP消息,然后发送到身份提供方的SSO服务samlp:ArtifactResponsexmlns:samlp=urn:oasis:names:tc:SAML:
2.0:protocolID=identifier_2InResponseTo=identifier_1Version=
2.0IssueInstant=2004-12-05T09:21:59Zds:Signaturexmlns:ds=http://___.w
3.org/2000/09/xmldsig#.../ds:Signaturesamlp:Statussamlp:StatusCodeValue=urn:oasis:names:tc:SAML:
2.0:status:Suc__ss//samlp:Statussamlp:AuthnRequestxmlns:samlp=urn:oasis:names:tc:SAML:
2.0:protocolxmlns:saml=urn:oasis:names:tc:SAML:
2.0:assertionID=identifier_3Version=
2.0IssueInstant=2004-12-05T09:21:59ZDestination=https://idp.example.org/SAML2/SSO/ArtifactProtocolBinding=urn:oasis:names:tc:SAML:
2.0:bindings:HTTP-ArtifactAssertionConsumerServi__URL=https://sp.example.com/SAML2/SSO/Artifactsaml:Issuerhttps://sp.example.com/SAML2/saml:Issuersamlp:NameIDPolicyAllowCreate=falseFor__t=urn:oasis:names:tc:SAML:
1.1:nameid-for__t:e__ilAddress//samlp:AuthnRequest/samlp:ArtifactResponseSSO服务处理samlp:AuthRequest元素,并进行安全检查如果用户没有一个有效地安全上下文,身份提供方对用户身份进行验证
6、重定向到断言消费服务IDP端的SSO服务通过用户代理转向到SP端的断言消费服务先前的RelayState参数和新的SAMLart参数和URL一并转向到请求端
7、请求SP端的断言消费服务用户代理请求在服务提供方的断言消费服务https://sp.example.com/SAML2/SSO/ArtifactSAMLart=artifact_2RelayState=token其中Token是第3步骤产生的,artifact_2是在步骤6中产生
8、请求IDP端的ArtifactResolutionServi__通过发送绑定到SAMLSOAP消息中的samlp:ArtifactResolve元素到身份提供方的artifactresolution服务,断言消费服务会再次引用该artifactsamlp:ArtifactResolvexmlns:samlp=urn:oasis:names:tc:SAML:
2.0:protocolxmlns:saml=urn:oasis:names:tc:SAML:
2.0:assertionID=identifier_4Version=
2.0IssueInstant=2004-12-05T09:22:04ZDestination=https://idp.example.org/SAML2/ArtifactResolutionsaml:Issuerhttps://sp.example.com/SAML2/saml:Issuerds:Signaturexmlns:ds=http://___.w
3.org/2000/09/xmldsig#.../ds:Signaturesamlp:Artifactartifact_2/samlp:Artifact/samlp:ArtifactResolve其中samlp:Artifact元素的值是在步骤7中传递过来的
9、响应断言IDP端的Artifactresolution服务返回包含了samlp:Response的samlp:ArtifactResponse元素,然后绑定到SAMLSOAP消息发送到服务提供方的断言消费服务samlp:ArtifactResponsexmlns:samlp=urn:oasis:names:tc:SAML:
2.0:protocolID=identifier_5InResponseTo=identifier_4Version=
2.0IssueInstant=2004-12-05T09:22:05Zds:Signaturexmlns:ds=http://___.w
3.org/2000/09/xmldsig#.../ds:Signaturesamlp:Statussamlp:StatusCodeValue=urn:oasis:names:tc:SAML:
2.0:status:Suc__ss//samlp:Statussamlp:Responsexmlns:samlp=urn:oasis:names:tc:SAML:
2.0:protocolxmlns:saml=urn:oasis:names:tc:SAML:
2.0:assertionID=identifier_6InResponseTo=identifier_3Version=
2.0IssueInstant=2004-12-05T09:22:05ZDestination=https://sp.example.com/SAML2/SSO/Artifactsaml:Issuerhttps://idp.example.org/SAML2/saml:Issuerds:Signaturexmlns:ds=http://___.w
3.org/2000/09/xmldsig#.../ds:Signaturesamlp:Statussamlp:StatusCodeValue=urn:oasis:names:tc:SAML:
2.0:status:Suc__ss//samlp:Statussaml:Assertionxmlns:saml=urn:oasis:names:tc:SAML:
2.0:assertionID=identifier_7Version=
2.0IssueInstant=2004-12-05T09:22:05Zsaml:Issuerhttps://idp.example.org/SAML2/saml:Issuersaml:Su__ectsaml:NameIDFor__t=urn:oasis:names:tc:SAML:
1.1:nameid-for__t:e__ilAddressuser@__il.example.org/saml:NameIDsaml:Su__ectConfir__tionMethod=urn:oasis:names:tc:SAML:
2.0:cm:bearersaml:Su__ectConfir__tionDataInResponseTo=identifier_3Recipient=https://sp.example.com/SAML2/SSO/ArtifactNotOnOrAfter=2004-12-05T09:27:05Z//saml:Su__ectConfir__tion/saml:Su__ectsaml:ConditionsNotBefore=2004-12-05T09:17:05ZNotOnOrAfter=2004-12-05T09:27:05Zsaml:Au___n__Restrictionsaml:Au___n__https://sp.example.com/SAML2/saml:Au___n__/saml:Au___n__Restriction/saml:Conditionssaml:AuthnStatementAuthnInstant=2004-12-05T09:22:00ZSessionIndex=identifier_7saml:AuthnContextsaml:AuthnContextClassRefurn:oasis:names:tc:SAML:
2.0:ac:classes:PasswordProtectedTransport/saml:AuthnContextClassRef/saml:AuthnContext/saml:AuthnStatement/saml:Assertion/samlp:Response/samlp:ArtifactResponse
10、重定向到目标资源断言消费服务处理响应,并在服务提供方创建安全的上下文,并重定向到目标资源到用户代理
11、再次请求SP的安全资源用户代理再次请求服务提供方的目标资源https://sp.example.com/myresour__
12、相应目标资源请求因为安全资源已经存在,服务提供方返回资源到用户代理身份提供方发现ProfileSAML
2.0身份提供者发现profile介绍了如下概念*CommonDo__in,公共域*CommonDo__inCookie,公共域cookie*CommonDo__inCookieWritingServi__,公共域写服务*CommonDo__inCookieReadingServi__,公共域读服务举一个例子,假设NWA(nwa.com)和KLM(klm.com)属于虚拟组织SkyTeamClobalAllian__(skyteam.com)在这个例子中,skyteam.com称为公共域NWA和KLM在该公共域中拥有自己的代表域nwa.skyteam.com和klm.skyteam.com.公共域cookie是一个面向整个公共域的安全浏览器cookie对于每一个浏览器用户来说,cookie存储了最近访问IdP的历史列表Cookie的名值指定了IDP发现Profile.在成功完成认证行为后,Idp请求公共域写服务该服务会增加idp的唯一标识到公共域cookie中当SP接受到一个对受保护资源的未认证的请求时,会向公共域读服务请求发现浏览器用户最近使用最多的IDP断言查询/请求Profile断言查询/请求Profile是个常见的profile,它使用如下SAML
2.0元素提供了大量被称为queries的类型samlp:AssertionIDRequest元素,被用来请求赋予唯一ID的断言saml:Su__ectQuery元素,是一个抽象的扩展点,允许定义新的面向对象的SAML查询samlp:AuthnQuery元素,用来向属性授权请求给定的主题相关属性samlp:AuthzDecisionQuery元素,用来向受信任的第三方请求授权决定SAMLSOAP绑定通常用在查询使用中SAML属性查询属性可能是SAML查询中最重要的类型通常请求方代表主体向身份提供者查询属性如下是主题直接发布查询的例子samlp:AttributeQueryxmlns:saml=urn:oasis:names:tc:SAML:
2.0:assertionxmlns:samlp=urn:oasis:names:tc:SAML:
2.0:protocolID=aaf23196-1773-2113-474a-fe___412ab72Version=
2.0IssueInstant=2006-07-17T20:31:40Zsaml:IssuerFor__t=urn:oasis:names:tc:SAML:
1.1:nameid-for__t:X509Su__ectNameC=USO=NCSA-TESTOU=UserCN=trsc__o@uiuc.edu/saml:Issuersaml:Su__ectsaml:NameIDFor__t=urn:oasis:names:tc:SAML:
1.1:nameid-for__t:X509Su__ectNameC=USO=NCSA-TESTOU=UserCN=trsc__o@uiuc.edu/saml:NameID/saml:Su__ectsaml:AttributeNameFor__t=urn:oasis:names:tc:SAML:
2.0:attrname-for__t:uriName=urn:oid:
2.
5.
4.42FriendlyName=givenName/saml:Attributesaml:AttributeNameFor__t=urn:oasis:names:tc:SAML:
2.0:attrname-for__t:uriName=urn:oid:
1.
3.
6.
1.
4.
1.
1466.
115.
121.
1.26FriendlyName=__il/saml:Attribute/samlp:AttributeQuery在该实例中,Issuer为Su__ect,有时被称为属性自查询身份提供方会返回如下的断言,被封装到samlp:Response中(在下面示例中未展现)saml:Assertionxmlns:saml=urn:oasis:names:tc:SAML:
2.0:assertionxmlns:xs=http://___.w
3.org/2001/XMLSche__xmlns:xsi=http://___.w
3.org/2001/XMLSche__-instan__xmlns:ds=http://___.w
3.org/2000/09/xmldsig#ID=_33776a319493ad607b7ab3e6__482e45Version=
2.0IssueInstant=2006-07-17T20:31:41Zsaml:Issuerhttps://idp.example.org/SAML2/saml:Issuerds:Signature.../ds:Signaturesaml:Su__ectsaml:NameIDFor__t=urn:oasis:names:tc:SAML:
1.1:nameid-for__t:X509Su__ectNameC=USO=NCSA-TESTOU=UserCN=trsc__o@uiuc.edu/saml:NameIDsaml:Su__ectConfir__tionMethod=urn:oasis:names:tc:SAML:
2.0:cm:holder-of-keysaml:Su__ectConfir__tionDatads:KeyInfods:X509Datads:X509__rtificateMIICiDCCAXACCQDE+9eiWrm62jANBgkqhkiG9w0BA__FADBFMQswCQYDV__GEwJVUzE__BAGA1UEChMJTkNTQS1URVNUMQ0w__YDV__LEwRVc2VyMRMwEQYDV__DEwpTUC1TZXJ2aWNlMB4XDTA2MDcxNzIwMjE0MVoXDTA2MDcxODIwMjE0MVowSzEL__kGA1UEBhMCVVMxEjAQBgNVBAoTCU5DU0EtVEVTVDEN__sGA1UECxMEVXNlcjEZMBcGA1UEAwwQdHJzY2F2b0B1aXVjLmVkdTCBnzANBgkqhkiG9w0BAQEFAAO__QAwgYkCgYE__9QMe4lRl3XbWPcflbCjGK9gty6z__mp+tsaJI__0VaBaZ3t+tSXknelYifenCc2O3yaX76aq53QMXy+5wKQYe8Rzdw28Nv3a73wfjXJXoUhGkvERcscs9EfIWcCg2bHOg8uSh+Fbv3lHih4l__5MCS2buJfsR7dlr/xsadU2RcCAwEAATANBgkqhkiG9w0BA__FAAOCAQEAdyIcMTob7TVkelfJ7+I1j0LO24UlKvbLzd2OPvcFTCv6fVHxEjk0QxaZXJhreZ6+rIdiMXrEzlRdJEs__xtDW8++sVp6__oB5EX1y3ez+__AIL4gcjvKZUR4dMryWshWIBHKFFul+r7urUgvWI12KbMeE9KP+kiiiiTskLcKgFzngw1JselmHhTcTCrcDocn5yO2+d3dog52vSOtVFDB__uvDixO2hv679JR6Hlqjtk4GExpE9iVI0wdPE038uQIJJTXlh__MLvUGVh/c0ReJBn92Vj4dI/yy6PtY/8ncYLYNkjgoVN0J/ymOktn9lTlFyTiuY4OuJsZRO1+zWLy9g==/ds:X509__rtificate/ds:X509Data/ds:KeyInfo/saml:Su__ectConfir__tionData/saml:Su__ectConfir__tion/saml:Su__ectsaml:ConditionsNotBefore=2006-07-17T20:31:41ZNotOnOrAfter=2006-07-18T20:21:41Z/saml:Conditionssaml:AuthnStatementAuthnInstant=2006-07-17T20:31:41Zsaml:AuthnContextsaml:AuthnContextClassRefurn:oasis:names:tc:SAML:
2.0:ac:classes:TLSClient/saml:AuthnContextClassRef/saml:AuthnContext/saml:AuthnStatementsaml:AttributeStatementsaml:Attributexmlns:x500=urn:oasis:names:tc:SAML:
2.0:profiles:attribute:X500x500:Encoding=LDAPNameFor__t=urn:oasis:names:tc:SAML:
2.0:attrname-for__t:uriName=urn:oid:
2.
5.
4.42FriendlyName=givenNamesaml:AttributeValuexsi:type=xs:stringTom/saml:AttributeValue/saml:Attributesaml:Attributexmlns:x500=urn:oasis:names:tc:SAML:
2.0:profiles:attribute:X500x500:Encoding=LDAPNameFor__t=urn:oasis:names:tc:SAML:
2.0:attrname-for__t:uriName=urn:oid:
1.
3.
6.
1.
4.
1.
1466.
115.
121.
1.26FriendlyName=__ilsaml:AttributeValuexsi:type=xs:stringtrsc__o@g__il.com/saml:AttributeValue/saml:Attribute/saml:AttributeStatement/saml:Assertion和前面展示的BearAssertion对照,该断言相比主体用来认证身份提供者的X.509证书的生命周期的时间更长然而,因为断言是签名的,用户可以把断言发送给依赖联盟,并且用户可以证明证书相应私钥的所有者,依赖联盟会确认断言是可信的SAML
2.0Metadata毫不夸张的说,metadata是用来使SAML工作,或者说工作良好的关键来看一下metadata工作的例子通过浏览器,身份提供方接受到服务提供方发送的samlp:AuthnRequest元素身份提供方是如何相信发送的服务提供方是合法的,而不是恶意服务提供方用来窃取用户的私有信息呢答案是Metadata!在发送认证响应之前,身份提供方会向metadata中查询受信任的服务提供方在以前的场景中,身份提供者是如何知道认证响应转向的地址呢?答案是Metadata!身份提供方查询会查询metadata中已经安排好的服务提供方的终端服务提供方是如何知道认证响应来自受信任的身份提供方答案是metadata!服务提供方用公钥判断断言的有效性数据也来自于metadata服务提供方是怎么知道到受信任的身份提供方的那个位置来处理artifact呢?答案是metadata服务提供从metadata中查找先前安排好的身份提供方artifact出阿里服务的终端Thelistgoesonandon.元数据在身份提供方和服务提供方间保持着安全事务(bootstraps)在metadata之前,受信任信息根据服务的自身定义被编码现在受信任信息很容易通过标准的metadata来共享SAML
2.0提供了定义良好,可互操作的metadata格式,通过这个格式可以使实体保持受信任过程的处理平衡(thatentitiescanleveragetobootstrapthetrustpro__ss)IdentityProviderMetadata身份提供方发布了自身的数据到md:EntityDescriptor元素md:EntityDescriptorxmlns:md=urn:oasis:names:tc:SAML:
2.0:metadataxmlns:saml=urn:oasis:names:tc:SAML:
2.0:assertionxmlns:ds=http://___.w
3.org/2000/09/xmldsig#entityID=https://idp.example.org/SAML2!--insertds:Signatureelement--!--insertmd:IDPSSODescriptorelementbelow--!--insertmd:AttributeAuthorityDescriptorelementnotshown--md:Organizationmd:OrganizationNamexml:lang=enSAMLIdentityProvider/md:OrganizationNamemd:OrganizationDisplayNamexml:lang=enSAMLIdentityProvider@SomeLocation/md:OrganizationDisplayNamemd:OrganizationURLxml:lang=enhttp://___.idp.example.org//md:OrganizationURL/md:Organizationmd:ContactPersoncontactType=technicalmd:SurNameSAMLIdPSupport/md:SurNamemd:E__ilAddress__ilto:saml-support@idp.example.org/md:E__ilAddress/md:ContactPerson/md:EntityDescriptorentityID属性是身份提供方的唯一标识注意数字签名的细节ds:Signature元素在本例中已被忽略身份提供方管理sso服务和属性授权,每一个属性都拥有自己的描述我们在下面描述了SSO服务metadata为md:AttributeAuthorityDescriptor元素也没有在实例中显示SSOServi__metadata身份提供方SSO服务在md:IDPSSODescriptor元素中描述md:IDPSSODescriptorprotocolSupportEnumeration=urn:oasis:names:tc:SAML:
2.0:protocolmd:KeyDescriptoruse=signingds:KeyInfods:KeyNameIdPSSOKey/ds:KeyName/ds:KeyInfo/md:KeyDescriptormd:ArtifactResolutionServi__isDefault=trueindex=0Binding=urn:oasis:names:tc:SAML:
2.0:bindings:SOAPLocation=https://idp.example.org/SAML2/ArtifactResolution/md:NameIDFor__turn:oasis:names:tc:SAML:
1.1:nameid-for__t:e__ilAddress/md:NameIDFor__tmd:NameIDFor__turn:oasis:names:tc:SAML:
2.0:nameid-for__t:transient/md:NameIDFor__tmd:SingleSignOnServi__Binding=urn:oasis:names:tc:SAML:
2.0:bindings:HTTP-POSTLocation=https://idp.example.org/SAML2/SSO/POST/md:SingleSignOnServi__Binding=urn:oasis:names:tc:SAML:
2.0:bindings:HTTP-ArtifactLocation=https://idp.example.org/SAML2/Artifact/saml:AttributeNameFor__t=urn:oasis:names:tc:SAML:
2.0:attrname-for__t:uriName=urn:oid:
1.
3.
6.
1.
4.
1.
5923.
1.
1.
1.1FriendlyName=eduPersonAffiliationsaml:AttributeValuemember/saml:AttributeValuesaml:AttributeValuestudent/saml:AttributeValuesaml:AttributeValuefaculty/saml:AttributeValuesaml:AttributeValueemployee/saml:AttributeValuesaml:AttributeValuestaff/saml:AttributeValue/saml:Attribute/md:IDPSSODescriptor先前的元数据元素在身份提供方中描述了SSO服务注意以下元素的细节描述key信息被简单概括;md:ArtifactResolutionServi__元素的绑定属性指明SAMLSOAP绑定应该使用artifact处理;md:ArtifactResolutionServi__元素的Location属性,被用在步骤8中的“doubleartifact”profilemd:ArtifactResolutionServi__元素的index属性的值被用做SAML类型为0x0004的artifact的EndpointIndexmd:NameIDFor__t元素表明SSO服务支持什么名称标识格式md:SingleSignOnServi__元素的Binding属性是由SAML
2.0绑定规范定的标准URIs支持HTTPPOST绑定的md:SingleSignOnServi__元素的Location属性被用在“doublePOST”profile的步骤
2.支持HTTPartifact绑定的md:SingleSignOnServi__元素的Location属性被用在“doubleartifact”Profile的步骤
2.saml:Attribute元素描述了身份提供方要声明的属性saml:AttributeValue元素列举出属性可用用到的可能值Servi__Providermetadata服务提供方同样发布数据到md:EntityDescriptor元素md:EntityDescriptorxmlns:md=urn:oasis:names:tc:SAML:
2.0:metadataxmlns:saml=urn:oasis:names:tc:SAML:
2.0:assertionxmlns:ds=http://___.w
3.org/2000/09/xmldsig#entityID=https://sp.example.com/SAML2!--insertds:Signatureelement--!--insertmd:SPSSODescriptorelementseebelow--md:Organizationmd:OrganizationNamexml:lang=enSAMLServi__Provider/md:OrganizationNamemd:OrganizationDisplayNamexml:lang=enSAMLServi__Provider@SomeLocation/md:OrganizationDisplayNamemd:OrganizationURLxml:lang=enhttp://___.sp.example.com//md:OrganizationURL/md:Organizationmd:ContactPersoncontactType=technicalmd:SurNameSAMLSPSupport/md:SurNamemd:E__ilAddress__ilto:saml-support@sp.example.com/md:E__ilAddress/md:ContactPerson/md:EntityDescriptor由服务提供者管理的主要组件是断言消费服务,下面将对断言消费服务进行讨论AssertionConsumerServi__Metadata断言消费服务由md:SPSSODescriptor元素来代表md:SPSSODescriptorprotocolSupportEnumeration=urn:oasis:names:tc:SAML:
2.0:protocolmd:KeyDescriptoruse=signingds:KeyInfods:KeyNameSPSSOKey/ds:KeyName/ds:KeyInfo/md:KeyDescriptormd:ArtifactResolutionServi__isDefault=trueindex=0Binding=urn:oasis:names:tc:SAML:
2.0:bindings:SOAPLocation=https://sp.example.com/SAML2/ArtifactResolution/md:NameIDFor__turn:oasis:names:tc:SAML:
1.1:nameid-for__t:e__ilAddress/md:NameIDFor__tmd:NameIDFor__turn:oasis:names:tc:SAML:
2.0:nameid-for__t:transient/md:NameIDFor__tmd:AssertionConsumerServi__isDefault=trueindex=0Binding=urn:oasis:names:tc:SAML:
2.0:bindings:HTTP-POSTLocation=https://sp.example.com/SAML2/SSO/POST/md:AssertionConsumerServi__index=1Binding=urn:oasis:names:tc:SAML:
2.0:bindings:HTTP-ArtifactLocation=https://sp.example.com/SAML2/Artifact/md:AttributeConsumingServi__isDefault=trueindex=0md:Servi__Namexml:lang=enServi__ProviderPortal/md:Servi__Namemd:RequestedAttributeNameFor__t=urn:oasis:names:tc:SAML:
2.0:attrname-for__t:uriName=urn:oid:
1.
3.
6.
1.
4.
1.
5923.
1.
1.
1.1FriendlyName=eduPersonAffiliation/md:RequestedAttribute/md:AttributeConsumingServi__/md:SPSSODescriptor注意下面详细描述了md:SPSSODescriptormetadata的元素md:AssertionConsumerServi__元素中index属性被用作samlp:AuthnRequest元素中AssertionConsumerServi__Index属性的值支持HTTPPOST绑定index=”0”的md:AssertionConsumerServi__元素中的Location属性被用在“doublePOST”Profile中的第4步;支持HTTPArtifact绑定index=”1”的md:AssertionConsumerServi__元素中的Location属性被用在“doubleartifact”Profile中的第6步;md:AssertionConsumerServi__元素是被身份提供方用来明确表述saml:AttributeStatement元素,saml:AttributeStatement是在Web浏览器SSO中被推到服务提供方的md:AttributeConsumerServi__元素中的index属性是用作samlp:AuthnRequest元素中AssertionConsumerServi__Index属性的值参考资料【SAMLOverview】http://___.oasis-open.org/committees/download.php/22553/sstc-saml-tech-overview-2%200-draft-
13.pdf;【SAMLConform】http://docs.oasis-open.org/security/saml/v
2.0/saml-confor__n__-
2.0-os.pdf;【SAMLCore】http://docs.oasis-open.org/security/saml/v
2.0/saml-core-
2.0-os.pdf;【SAMLBind】http://docs.oasis-open.org/security/saml/v
2.0/saml-bindings-
2.0-os.pdf;【SAMLProf】http://docs.oasis-open.org/security/saml/v
2.0/saml-profiles-
2.0-os.pdf;【SAMLMeta】http://docs.oasis-open.org/security/saml/v
2.0/saml-metadata-
2.0-os.pdf;【SAMLAuthnCtx】http://docs.oasis-open.org/security/saml/v
2.0/saml-authn-context-
2.0-os.pdf【SAMLSecurity】http://docs.oasis-open.org/security/saml/v
2.0/saml-sec-consider-
2.0-os.pdf;【SAMLGlossary】http://docs.oasis-open.org/security/saml/v
2.0/saml-glossary-
2.0-os.pdf。