簡體   English   中英

使用 SAML 和 Spring Security 的 SSO 為 REST 服務

[英]SSO using SAML with Spring Security for REST service

我在 Spring Boot 上有一個 REST 服務,現在需要使用 SAML 添加 SSO。 我是 SAML / Spring Security 的新手,並試圖了解需要添加到我的應用程序中的主要部分。

我的 IT 提供了元數據文件:

<md:EntityDescriptor ID="Lusm3k0_RWEBKgnQ" cacheDuration="PT1440M" entityID="XXX.UAT.SAML2.0"
                 xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata">
<md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"
                     WantAuthnRequestsSigned="false">
    <md:KeyDescriptor use="signing">
        <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <ds:X509Data>
                <ds:X509Certificate>
                    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
                </ds:X509Certificate>
            </ds:X509Data>
        </ds:KeyInfo>
    </md:KeyDescriptor>
    <md:ArtifactResolutionService index="0" Location="https://SITE-XXX.com/idp/ARS.ssaml2"
                                  Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" isDefault="true"/>
    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
                            Location="https://SITE-XXX.com/idp/SLO.saml2"/>
    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                            Location="https://SITE-XXX.com/idp/SLO.saml2"/>
    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact"
                            Location="https://SITE-XXX.com/idp/SLO.saml2"/>
    <md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP"
                            Location="https://SITE-XXX.com/idp/SLO.ssaml2"/>
    <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                            Location="https://SITE-XXX.com/idp/SSO.saml2"/>
    <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
                            Location="https://SITE-XXX.com/idp/SSO.saml2"/>
    <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact"
                            Location="https://SITE-XXX.com/idp/SSO.saml2"/>
    <md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP"
                            Location="https://SITE-XXX.com/idp/SSO.saml2"/>
    <saml:Attribute Name="email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"
                    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"/>
</md:IDPSSODescriptor>
<md:AttributeAuthorityDescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <md:AttributeService Location="https://SITE-XXX.com/idp/attrsvc.ssaml2"
                         Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP"/>
</md:AttributeAuthorityDescriptor>
<md:ContactPerson contactType="administrative">
    <md:Company>XXX, Inc.</md:Company>
    <md:GivenName>Global</md:GivenName>
    <md:SurName>Directory Services</md:SurName>
    <md:EmailAddress>IAM_SSO_Ops@XXX.com</md:EmailAddress>
</md:ContactPerson>
</md:EntityDescriptor>

在 pom.xml 我添加了依賴項:

    <dependency>
        <groupId>org.springframework.security.extensions</groupId>
        <artifactId>spring-security-saml2-core</artifactId>
        <version>2.0.0.M31</version>
    </dependency>

如何為 Spring SAML 配置和使用此元數據? 配置文件應該是什么樣子的? 我只需要最簡單的情況,其中 /** 所有 REST 點都是安全的。

我在互聯網上搜索的解決方案沒有使用這種元數據,我不明白如何正確使用它。

謝謝。

SAML 有一些學習曲線,因為它包含許多術語。 端到端示例在這里可能無法實現,但我可以告訴您它是如何工作的。

您的管理員提供的 xml 是您的 IdP 的聯合元數據。 在 SAML 中,SAML 服務提供者和 SAML IdP 都通過 xml 文件或作為返回此 xml 內容的服務交換其元數據。
聯合元數據包含諸如簽名/加密證書、端點信息、支持的協議等信息。
與上述文件類似,您必須創建自己的聯邦元數據文件,並將其提供給管理員並要求他將您的應用程序注冊為 IdP 內的服務提供者。

此處給出如何在春季開始使用 SAML。

關於保護 REST APIs -

  1. 您應該添加一個過濾器來檢查身份驗證令牌。
  2. 如果令牌不存在,則重定向到 IdP。
  3. 身份驗證完成后,IdP 將重定向回您的應用程序中的已知端點(斷言消費者端點),您將在其中獲得 SAML 斷言。
  4. 提取此斷言以了解用戶詳細信息。 為此,您必須使用開放的 SAML 庫。
  5. 為您的應用程序創建單獨的會話,生成令牌或 cookie 並將其作為響應發送。 下次,每個 REST 調用都需要這個令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM