Я использую Shibboleth SP для авторизации SAML.
Недавно IdP изменил конфигурацию и теперь требует подписи AuthRequest.
Метаданные IdP имеют следующий параметр
<md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol"
WantAuthnRequestsSigned="true"><md:KeyDescriptor use="signing">
Файл SP shibboleth2.xml имеет следующий тег
<ApplicationDefaults entityID="...."
REMOTE_USER="eppn persistent-id targeted-id email Email FirstName LastName NameID">
После того как IdP принудительно подписал AuthRequest, мы изменили наш файл shibboleth2.xml следующим образом
<ApplicationDefaults entityID="..."
REMOTE_USER="eppn persistent-id targeted-id email
Email FirstName LastName NameID"
signing="true" encryption="true">
В основном я добавил signing="true"
и encryption="true"
.
После этого новые сгенерированные метаданные имеют следующий атрибут в теге
<md:SPSSODescriptor AuthnRequestsSigned="1"
protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol
urn:oasis:names:tc:SAML:1.1:protocol urn:oasis:names:tc:SAML:1.0:protocol">
Ранее атрибут AuthnRequestsSigned="1"
отсутствовал.
После этого при попытке аутентификации выдается следующая ошибка:
<samlp:Status><samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Responder"/>
<samlp:StatusMessage>Unable to verify the signature</samlp:StatusMessage>
</samlp:Status>
Вопрос 1. Нужно ли IdP предоставлять эти новые метаданные?
Вопрос 2: Есть идеи, почему это происходит?
Вопрос 3: Нужно ли что-либо менять в конфигурации?
P.S. До применения подписи AuthRequest это работало, поэтому я не думаю, что есть какие-либо другие проблемы в конфигурации.
Вот пример AuthRequest, который отправляется
<samlp:AuthnRequest
AssertionConsumerServiceURL="https://...SP-host.../Shibboleth.sso/SAML2/POST"
Destination="https://...idp-host.../marrsso/idp/SSO.saml2"
ID="...some-id..." IssueInstant="2019-01-11T14:13:25Z"
ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Version="2.0"
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
<saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">https://...entity-id.../shibboleth</saml:Issuer><samlp:NameIDPolicy AllowCreate="1"/></samlp:AuthnRequest>
Я считаю, что информация для подписи должна указываться здесь как часть запроса. Как запрос HTTP, он идет как запрос GET, это правильно?
Когда я вижу запрос в сети, я вижу, что Подпись идет как параметр запроса
Код статуса запроса: «200»