Ошибка SAML для единого входа с ADFS - MSIS0038: Сообщение SAML имеет неверную подпись
Привет, я пытаюсь использовать SSO для аутентификации пользователей моего клиента непосредственно на моем сайте. IDP моего клиента - Microsoft ADFS, и я использую Passport-SAML ( https://github.com/bergie/passport-saml) для настройки процесса единого входа.
После получения специального URL-адреса, который я предоставляю своему клиенту (пример: www.myClient.myCompany.com), пользователь (не прошедший проверку подлинности), как и ожидалось, перенаправляется на страницу входа клиента. После того, как он вводит свои учетные данные, он остается на странице входа в систему, НО работа SSO, потому что пользователь проходит проверку подлинности, что означает, что если он откроет новую вкладку и перейдет на www.myClient.myCompany.com, он будет перенаправлен на мой сайт.
Здесь ошибка в журнале сервера ADFS:
The Federation Service encountered an error while processing the SAML authentication request.
Additional Data
Exception details:
Microsoft.IdentityModel.Protocols.XmlSignature.SignatureVerificationFailedException: MSIS0038: SAML Message has wrong signature. Issuer: 'www.myCompany.co'.
at Microsoft.IdentityServer.Protocols.Saml.Contract.SamlContractUtility.CreateSamlMessage(MSISSamlBindingMessage message)
at Microsoft.IdentityServer.Service.SamlProtocol.SamlProtocolService.Issue(IssueRequest issueRequest)
at Microsoft.IdentityServer.Service.SamlProtocol.SamlProtocolService.ProcessRequest(Message requestMessage)
Спасибо за ваше время!
3 ответа
(после ADFS и PingFederate SSO: сообщение SAML имеет неверную подпись)
Мы используем другую библиотеку, и это была другая проблема для нас (у нашего клиента фактически была неправильная подпись), но в процессе отладки я натолкнулся на эту тему, которая звучит очень похоже на то, что вы описываете.
Исправление заключается в установке этого исправления. Можете ли вы проверить, установлен ли ваш клиент на Windows Server 2008 и 2012, установлен ли 2843638 или 2843639, и если да, установить исправление, если оно еще не установлено? Просто выстрел в темноте...
Я не знаком ни с Microsoft ADFS, ни с Passport-SAML, но я, когда у нас были ошибки в сигнатурах, был из-за того, что отпечаток SHA1 сертификата IDp не совпадал с тем, что был на нашем конце.
Мы исправили их, убедившись, что сертификат правильно отформатирован, а затем вычислили отпечатки пальцев.
Формат: https://developers.onelogin.com/saml/online-tools/x509-certs/format-x509-certificate Отпечаток пальца: https://developers.onelogin.com/saml/online-tools/x509-certs/calculate-fingerprint
Надеюсь, это ваш случай
Не гуру Passport-SAML, но обычные причины этой ошибки с ADFS:
Несоответствие подписи - ADFS ожидает, что AuthRequest будет подписан, и это не так, или наоборот.
Срок действия сертификата подписи, установленного в этом RP, истек или является неправильным в том смысле, что это не тот сертификат, который использует клиент.
На уровне RP, посмотрите на:
Get-ADFSRelyingPartyTrust
[-SignedSamlRequestsRequired] [-SamlResponseSignature]
или глобально:
Get-ADFSProperties
SignedSamlRequestsRequired
SignSamlAuthnRequests
и проверьте:
Get-AdfsCertificate -CertificateType "Подпись токена"