Единый выход из системы не работает с Shibboleth IdP

Я пытался реализовать поставщика услуг WEB SSO в java. Я использую Shibboleth Identity Provider. Все работает нормально до этапа аутентификации, и я успешно могу создать файл cookie сеанса/установить для пользователя. Но когда я пытаюсь использовать функцию единого выхода, я получаю ответ «RequestDenied» от shibboleth IdP. Я проверил журналы, и там было написано Эмитент входящего сообщения не был аутентифицирован. Тот же эмитент работает нормально при входе в систему, но выдает ошибку при выходе из системы. Любой файл конфигурации для обновления для него, любой указатель, предложение? Это мой запрос на выход.

<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
                     ID="jiojjcjckjaflbedlcjcpcnecigbjhaekalmfkcg"
                     IssueInstant="2014-02-24T23:30:25.257Z"
                     NotOnOrAfter="2014-02-24T23:35:25.257Z"
                     Version="2.0"
                     >
    <saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://localhost/sp/shibboleth</saml:Issuer>
    <saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
                 Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"
                 NameQualifier="urn:oasis:names:tc:SAML:2.0:assertion"
                 >rohit</saml:NameID>
    <samlp:SessionIndex/>
</samlp:LogoutRequest>

И вот что я получаю в ответ.

<saml2p:LogoutResponse xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"
                       Destination="https://localhost:8091/SSO/consumer"
                       ID="_02a145f4992cb2e11a8fc4aa43a74096"
                       InResponseTo="jiojjcjckjaflbedlcjcpcnecigbjhaekalmfkcg"
                       IssueInstant="2014-02-24T23:30:25.334Z"
                       Version="2.0"
                       >
    <saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"
                  Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity"
                  >https://localhost/shibboleth</saml2:Issuer>
    <saml2p:Status>
        <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Responder">
            <saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:RequestDenied" />
        </saml2p:StatusCode>
        <saml2p:StatusMessage>Message did not meet security requirements</saml2p:StatusMessage>
    </saml2p:Status>
</saml2p:LogoutResponse>

person Rohit Pandey    schedule 22.02.2014    source источник
comment
Какой URL-адрес вы нажимаете для выхода из системы или какой ответ вы отправляете для выхода и на какой URL-адрес?   -  person Akshay    schedule 24.02.2014
comment
https://‹hostname›/idp/profile/SAML2/Redirect/SLO?SAMLRequest= И для выхода я отправляю ответ от IdP на URL-адрес ACS. Где есть декодирование сервлетом и чтение ответного сообщения. В ответ пишется, что Request Denied Сообщение не соответствует требованиям безопасности. А в журнале IdP написано Эмитент входящего сообщения не прошел аутентификацию. P.S. У меня есть большие сомнения, что выход из системы вообще возможен. Вы реализовали выход из системы с помощью shibboleth?   -  person Rohit Pandey    schedule 24.02.2014


Ответы (1)


У вас включен параметр «Обязательная проверка подлинности сообщения» для профиля SLO.

Обычно вы можете найти этот параметр в нижней части файла конфигурации проверяющей стороны. Это должно выглядеть так.

<security:SecurityPolicy id="shibboleth.SAML2SLOSecurityPolicy" xsi:type="security:SecurityPolicyType">
    <security:Rule xsi:type="samlsec:Replay"/>
    <security:Rule xsi:type="samlsec:IssueInstant"/>
    <security:Rule xsi:type="samlsec:ProtocolWithXMLSignature" trustEngineRef="shibboleth.SignatureTrustEngine"/>
    <security:Rule xsi:type="samlsec:SAML2HTTPRedirectSimpleSign" trustEngineRef="shibboleth.SignatureTrustEngine"/>
    <security:Rule xsi:type="samlsec:SAML2HTTPPostSimpleSign" trustEngineRef="shibboleth.SignatureTrustEngine"/>
    <security:Rule xsi:type="security:ClientCertAuth" trustEngineRef="shibboleth.CredentialTrustEngine"/>
    <security:Rule xsi:type="samlsec:MandatoryIssuer"/>
    <security:Rule xsi:type="security:MandatoryMessageAuthentication"/>
</security:SecurityPolicy>

Обязательная аутентификация сообщения потребует от вас настройки способа проверки того, что сообщение пришло от доверенного узла. Обычно это делается с подписанными запросами. Поставщики услуг могут подписывать свои метаданные и предоставлять сертификат для проверки. Shibboleth можно настроить так, чтобы он доверял сертификату от поставщика услуг.

Один из способов добиться этого — настроить фильтр метаданных для вашего SP с чем-то вроде этого в вашем поставщике метаданных:

<metadata:MetadataFilter xsi:type="metadata:SignatureValidation"
                         trustEngineRef="shibboleth.MetadataTrustEngine"
                         requireSignedMetadata="true" />

Это ссылка на механизм доверия под названием shibboleth.MetadataTrustEngine. Механизмы доверия могут использоваться для проверки подписи.

Механизмы доверия также определены в конфигурации проверяющей стороны, так что просто найдите ее. Настройка по умолчанию выглядит так:

<security:TrustEngine id="shibboleth.SignatureTrustEngine" xsi:type="security:SignatureChaining">
    <security:TrustEngine id="shibboleth.SignatureMetadataExplicitKeyTrustEngine" xsi:type="security:MetadataExplicitKeySignature" metadataProviderRef="ShibbolethMetadata"/>
    <security:TrustEngine id="shibboleth.SignatureMetadataPKIXTrustEngine" xsi:type="security:MetadataPKIXSignature" metadataProviderRef="ShibbolethMetadata"/>
</security:TrustEngine>

Этого должно быть достаточно, если вы определили поставщика метаданных как часть поставщика метаданных цепочки по умолчанию.

При желании вы можете просто отключить политику аутентификации сообщений, закомментировав:

<security:Rule xsi:type="security:MandatoryMessageAuthentication"/>
person Sean    schedule 15.04.2014