Я разрабатываю пример IdP, и мне удалось выполнить первые шаги для пользователя, входящего в систему, однако у меня много сомнений относительно RequestLogout с потоком, инициированным IdP.
Я отслеживаю и использую метаданные (https://nexus.microsoftonline-p.com/federationmetadata/saml20/federationmetadata.xml).
Мой RequestLogout выглядит следующим образом:
<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="my-random-id" Version="2.0" IssueInstant="2018-01-22T05:12:01Z" Destination="https://login.microsoftonline.com/login.srf">
<saml:Issuer>my-idp-issuer</saml:Issuer>
<saml:NameID SPNameQualifier="https://login.microsoftonline.com/login.srf" Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">my-name-id-xyz</saml:NameID>
</samlp:LogoutRequest>
После создания этого запроса я применяю подпись этого запроса (я следую этому ответу Создайте подписанный запрос SAML2 LogOut):
SAMLRequest=saml_request_logout_value&SigAlg=sig_alg_value
И я получаю значение подписи:
Signature=signature_value
После отправки с помощью HTTP-POST и перенаправления на страницу: https://login.microsoftonline.com/login.srf со значениями:
SAMLRequest=saml_request_logout_value
SigAlg=sig_alg_value
Signature=signature_value
После отправки HTTP-POST Office 365 выдает мне сообщение об ошибке: Произошла ошибка при попытке обработать сообщение WS-Federation. Сообщение было недействительным.
Что я делаю неправильно?
Параметры, отправленные в HTTP-POST, верны (SAMLRequest, SigAlg, Signature)?
Что я могу сделать неправильно, так это то, что я не применяю подпись в RequestLogout, потому что Я применяю подпись SAMLResponse и Assertion (в SAMLResponse), мне нужно применить подпись RequestLogout?. Однако в потоке SP к IdP Office 365 не отправляет RequestLogout со значением подписи в XML.
Я не вижу ни ответа, ни примера отправки IdP RequestLogout в Office 365.