У меня есть сервер ADFS как IdP. У меня есть отдельное приложение SP. Они определены в круге доверия. SSO по протоколу SAML работает нормально. Когда я пытаюсь выполнить запрос об отключении SP, я получил ошибку на стороне ADFS:Ошибка обработки SAML LogOutRequest на сервере ADFS
MSIS7000: Запрос на вход не соответствует стандарту WS-Federation для клиентов веб-браузера или профиля WebSSO протокола SAML 2.0.
EDIT Более подробно сообщение от ADFS трассировки событий:
MSIS7015: Этот запрос не содержит ожидаемого сообщения протокола или неправильные параметры протокола были найдены в соответствии с креплениями протокола HTTP SAML.
Я рассмотрел сообщение о выходе SAML и посмотрел правильно. Просто упомянем, что тот же SP выходит из строя с помощью ForgeRocks IdP (ex Sun OpenSSO).
SAML запрос loout сообщение:
<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
ID="b00b3f55-f3e3-4935-9e91-da6bf8b62efd"
Version="2.0"
IssueInstant="2013-08-27T09:45:08Z"
Destination="https://00.00.00.00/adfs/ls/"
Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified"
NotOnOrAfter="2013-08-27T09:50:08Z"
>
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">SPEntityId/</saml:Issuer>
<saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified">[email protected]</saml:NameID>
<samlp:SessionIndex>_ea853497-c58a-408a-bc23-c849752d9741</samlp:SessionIndex>
EDIT
Lan предложил мне, что подписание сообщений запроса выхода из системы обязательно. Он был прав. В спецификации OASIS (http://docs.oasis-open.org/security/saml/v2.0/saml-profiles-2.0-os.pdf), раздел 4.4.3.1. это описано. В соответствии с этим я отправляю подписанные сообщения, но у меня такая же проблема.
Подписано сообщение:
<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
ID="aed640c0-9455-49ea-9450-4ad7c08d98e7"
Version="2.0"
IssueInstant="2013-08-29T15:22:45Z"
Destination="https://server/adfs/ls/"
Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified"
NotOnOrAfter="2013-08-29T03:27:45Z"
>
<saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">user</saml:NameID>
<samlp:SessionIndex>_677952a2-7fb3-4e7a-b439-326366e677db</samlp:SessionIndex>
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">SPIssuer</saml:Issuer>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
<SignedInfo>
<CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" />
<SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" />
<Reference URI="#aed640c0-9455-49ea-9450-4ad7c08d98e7">
<Transforms>
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
</Transforms>
<DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" />
<DigestValue>53jjPvQ2Ty1Z+VikwrUwW4Erj3k=</DigestValue>
</Reference>
</SignedInfo>
<SignatureValue>signed value</SignatureValue>
<KeyInfo>
<X509Data>
<X509Certificate>certificate</X509Certificate>
</X509Data>
</KeyInfo>
</Signature>
Что я делаю не так? Должна ли быть указана какая-либо другая конечная точка в ADFS? Как я понял, он должен использоваться так же, как для запросов на подписку (которые отлично работают на моей стороне).
Спасибо, Rastko
AuthRequest работал для меня с ADFS2.0 без подписания. Но LogoutRequest не работает. Почему эта аномалия? Обязательно ли подписывать LogoutRequest - конечно? – mavis