SAML 2.0断言请求

时间:2013-09-13 18:21:57

标签: java saml-2.0

如何使用SAML 2.0将用户从网站A重定向到网站B?一旦用户完成他在网站B的活动,他应该回到网站A,根据网站B的结果,他应该能够在网站A上进行进一步的活动。

我也对服务提供商(SP)和身份提供商(IP)的想法感到困惑。网站A是服务提供商还是身份提供商,网站B也是如此?

我在SAML 2.0中的背景实际上是零,我正在阅读文档以了解如何创建SAML 2.0断言。我试图在java中实现它。

有没有人有任何良好的入门知识来理解SAML 2.0?

<?xml version="1.0" encoding="UTF-8"?>
-<saml2p:Response xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Version="2.0" IssueInstant="2013-04-12T15:43:42.389Z" ID="413be1b7-ac2d-4324-a359-998935f11a66">
  -<saml2p:Status><saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/></saml2p:Status>
  -<saml2:Assertion Version="2.0" IssueInstant="2013-04-19T20:16:07.090Z" ID="SamlAssertion-25171a8736ed098dde8659e5ba250b5f" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">
   <saml2:Issuer Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">ffx-ffe-w7-15.cgiabccompany.com</saml2:Issuer>
   <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <saml2:Subject><saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" NameQualifier="">test</saml2:NameID>
    <saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:sender-vouches"><saml2:NameID>CN=ffx-ffe-w7-15.cgiabccompany.com, OU=ffx, OU=ffe, O=cgifederal, L=Herndon, ST=VA, C=US</saml2:NameID></saml2:SubjectConfirmation>
    </saml2:Subject>
    <saml2:Conditions NotOnOrAfter="2013-04-19T20:21:08.437Z" NotBefore="2013-04-19T20:14:08.437Z"/>
    <saml2:AttributeStatement>
        <saml2:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" Name="State Exchange Code"> 
        <saml2:AttributeValue>MD0</saml2:AttributeValue>  
    </saml2:Attribute>               
    <saml2:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" Name="User Type">
    <saml2:AttributeValue>Consumer</saml2:AttributeValue>
    </saml2:Attribute>
    <saml2:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" Name="ABC Company User ID">
    <saml2:AttributeValue>john.doe@email.com</saml2:AttributeValue>
    </saml2:Attribute>
    <saml2:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" Name="Transfer Type">
    <saml2:AttributeValue>Direct Service</saml2:AttributeValue> 
    </saml2:Attribute>        
    <saml2:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" Name="Keep Alive URL">
    <saml2:AttributeValue>https://www.mycompany.com/extendsession.jsp</saml2:AttributeValue>
    </saml2:Attribute>        
    <saml2:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" Name="First Name">
    <saml2:AttributeValue>JOHN</saml2:AttributeValue>
    </saml2:Attribute>
    <saml2:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" Name="Middle Name">
    <saml2:AttributeValue>FISCHER</saml2:AttributeValue>
    </saml2:Attribute>
    <saml2:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" Name="Last Name">
    <saml2:AttributeValue>DOE</saml2:AttributeValue>
    </saml2:Attribute>
    <saml2:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" Name="City Name">
    <saml2:AttributeValue>PEORIA</saml2:AttributeValue>
    </saml2:Attribute>
    <saml2:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" Name="State">
    <saml2:AttributeValue>IL</saml2:AttributeValue>
    </saml2:Attribute>
    <saml2:Attribute NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified" Name="Zip Code">
    <saml2:AttributeValue>20190</saml2:AttributeValue>
    </saml2:Attribute>
 </saml2:AttributeStatement>
 <saml2:AuthnStatement SessionNotOnOrAfter="2013-04-12T15:43:42.328Z" SessionIndex="session#1" AuthnInstant="2013-04-12T15:43:42.328Z"><saml2:SubjectLocality DNSName="2.175.111.190" Address="1234 Fishy LN, PEORIA, IL 20190"/>
   <saml2:AuthnContext>
   <saml2:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password   
   </saml2:AuthnContextClassRef>
   </saml2:AuthnContext>
</saml2:AuthnStatement>
</saml2:Assertion>
</saml2p:Response>

1 个答案:

答案 0 :(得分:1)

典型的情况是带有工件bindig的SAML WEB SSO。

  1. 网站A(SP)发现用户没有经过身份验证的会话。
  2. SP将用户重定向到网站B(IDP),并将SAML AutnRequest作为URL参数。
  3. IDP对用户进行身份验证,并使用URL parmeter中的工件将其重定向回SP。
  4. SP使用ArtifactResolveRequest向IDP交换使用SOAP的断言的工件。
  5. 断言是用户进行身份验证的证据,可以包含有关IDP已存储的用户的信息。例如uid。

    在您谈论的场景中,网站A是SP,网站B是IDP。 SP是希望用户通过身份验证的实体,IDP(IDentity Provider)是提供身份验证的实体。

    使用许多产品实现SAML SSO,例如OpenAM Shibboleth。如果要在软件中构建SAML,可以使用OpenSAML或Spring SAML模块等库。

    我的书A Guide to OpenSAML,很好地介绍了SAML和OpenSAML库。

    其他相关阅读材料为The SAML technical overview,这些内容发布在blogg上。

    需要帮助?在博客上问我一个问题。需要很多帮助吗?我是雇佣的顾问。