Подписание запроса авторизации в Шибболет СП
Я использую 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: Нужно ли что-то менять в конфигурации?
PS До применения подписи 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"
0 ответов
Обычно отправка подписи является частью строки запроса. Это как предварительно подписанный URL.
Просто включение "signature =true" на SP не должно изменять ключ, который был изначально сгенерирован. Поэтому повторная отправка метаданных не является обязательным требованием. Уточните у IdP, были ли метаданные SP изначально импортированы полностью или они просто добавили проверяющую сторону и другие базовые конечные точки для интеграции, что может работать нормально, если подписывание запроса не требуется.
Если IdP не может проверить подпись, то они должны пропустить сертификат от SP. Чтобы быть уверенным, сравните два файла метаданных до и после включения подписи и шифрования, они должны совпадать (особенно вокруг сертификатов), но для дополнительного атрибута, который вы уже определили. В противном случае повторно отправьте метаданные.
Никаких других изменений конфигурации в этом случае не требуется.