Sustainsys.SAML2 использует http-редирект вместо http-post - PullRequest
0 голосов
/ 04 декабря 2018

Я должен сказать, что я только начал изучать аутентификацию SAML и столкнулся с проблемой аутентификации, которую, к сожалению, я не могу воспроизвести на своем компьютере разработчика, что еще больше смущает меня.

У меня есть следующая конфигурация с использованием OWIN: *Переменная 1003 *

var options = new Saml2AuthenticationOptions(false)
{
    Notifications = new Saml2Notifications
    {
        AuthenticationRequestCreated = (request, provider, dictionary) =>
        {
            request.Binding = Saml2BindingType.HttpPost;
        }
    },
    AuthenticationType = services.AuthenticationType,
    Caption = services.Caption,
    SPOptions = new SPOptions
    {
        EntityId = new EntityId(Path.Combine(services.RelyingPartyUri, "Saml2"))
    }
};

options.IdentityProviders.Add(new IdentityProvider(new EntityId(services.IdentityProviderConfiguration.IdentityProviderMetadataUri), options.SPOptions)
{
    AllowUnsolicitedAuthnResponse = true,
    Binding = Saml2BindingType.HttpPost,
    LoadMetadata = true,
    SingleSignOnServiceUrl = new Uri(services.IdentityProviderConfiguration.SingleSignOnUri)
});

app.UseSaml2Authentication(options);

services содержит конфигурацию, такую ​​как метаданные uri, sso uri и т. Д.

Эта конфигурация отлично работает на моем компьютере.Я проверил запрос SAML для входа в систему и вот что у меня там:

<saml2p:AuthnRequest 
    xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" 
    xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" 
    ID="id10c4b76119b64952857d38c7581ca0b4" 
    Version="2.0" 
    IssueInstant="2018-12-04T14:29:00Z" 
    Destination="https://identity.provider/trust/saml2/http-post/sso/application" 
    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
    AssertionConsumerServiceURL="https://application/Saml2/Acs">
    <saml2:Issuer>https://application/Saml2</saml2:Issuer>
</saml2p:AuthnRequest>

Аутентификация тогда работает нормально.

Когда я несколько раз развертываю этот код на внешнем сервере для тестированияработает как положено, но довольно часто я не могу аутентифицировать пользователя, потому что вместо http-post механизм аутентификации использует http-redirect.

В этом случае я вижу следующий запрос SAML для входа в систему:

<saml2p:AuthnRequest 
    xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" 
    xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" 
    ID="id10c4b76119b64952857d38c7581ca0b4" 
    Version="2.0" 
    IssueInstant="2018-12-04T14:29:00Z" 
    Destination="https://identity.provider/trust/saml2/http-redirect/sso/application" 
    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" 
    AssertionConsumerServiceURL="https://application/Saml2/Acs">
    <saml2:Issuer>https://application/Saml2</saml2:Issuer>
</saml2p:AuthnRequest>

Разница в URI единого входа, который используется для аутентификации.

До сих пор я проверял файлы конфигурации, чтобы устранить проблему конфигурации.Все конфигурации действительны и services.IdentityProviderConfiguration.SingleSignOnUri содержит действительный URI единого входа с http-post.Я поиграл с разными настройками, и, как вы можете видеть из фрагмента кода, я установил Binding на HttpPost, который, как я думал, должен был решить мою проблему в случае, если SingleSignOnServiceUrl автоматически берется из метаданных IDP.Я также просмотрел исходный код SustainS.SAML2 и не смог найти ничего, что могло бы дать мне подсказку.

Любая помощь высоко ценится!

1 Ответ

0 голосов
/ 05 декабря 2018

Если вы установите LoadMetadata=true, настройки, найденные в метаданных, переопределят вашу ручную настройку.Очевидно, что метаданные Idp содержат конечную точку https://identity.provider/trust/saml2/http-redirect/sso/application с привязкой POST.

Чтобы исправить это, попросите Idp получить правильные метаданные.Или установите LoadMetadata=false и положитесь на конфигурацию в коде.В этом случае вы должны добавить сертификат подписи Idp к вашему коду.

...