Подписание запроса авторизации в Шибболет СП - PullRequest
0 голосов
/ 11 января 2019

Я использую 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, это правильно? Когда я вижу запрос в сети, я вижу, что Подпись идет как параметр запроса enter image description here Код статуса запроса: «200»

1 Ответ

0 голосов
/ 11 марта 2019

Нередко отправлять подпись как часть строки запроса. Это как предварительно подписанный URL.

  1. Простое включение «signature = true» на SP не должно изменять ключ, который был изначально создан. Таким образом, повторная отправка метаданных не является требование. Проверьте с IdP, если метаданные SP были первоначально импортируется полностью или они просто добавляют проверяющую сторону и другие основные цели указывает на интеграцию, это может работать очень хорошо, если подпись запроса не требуется.

  2. Если IdP не может проверить подпись, то они должны отсутствовать сертификат от ИП. Чтобы быть уверенным, сравните два файла метаданных до и после включения подписи и шифрования они должны соответствие (особенно вокруг сертификатов), но для дополнительного атрибута что вы уже определили. В противном случае повторно отправьте метаданные.

  3. В этом случае никаких других изменений конфигурации не требуется.

...