SAML2 с Оуэном - невозможно аутентифицировать - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть образец приложения WebForms с Owin.Пытался выполнить проверку подлинности SAML2 с помощью Azure AD IdP.Работает нормально, пользователь зарегистрирован в приложении и аутентифицирован.

Теперь мне нужно использовать другой IdP.Так что я изменил свое приложение и ничего.Ответ Saml содержит успех, поэтому IdP аутентифицировал меня.Но вызов Context.GetOwinContext (). Authentication.GetExternalLoginInfo () возвращает ноль.

Я нашел несколько сообщений о «внешних файлах cookie», но я не думаю, что это моя проблема, потому что пример Azure работает нормально.Сбой при переключении на другой IdP.

Похоже, что разница только в формате SAML Xml.Azure возвращается как

<samlp:Response Destination="https://localhost:44390/Saml2/Acs"
  ID="_5eaccd77-fa78-4f59-86d9-67049ef074ce" InResponseTo="id73419322f1cc440184f456548cee7d09"
  IssueInstant="2018-12-21T15:00:58.248Z" Version="2.0"
  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol">
</samlp:Response>

, но другой IdP возвращается как

<saml2p:Response Destination="https://localhost:44390/Saml2/Acs"
  ID="_9547020d571863ef02c1f6d3dc8d94d7" InResponseTo="id46574a117a254f06a272ec02769b1a3c"
  IssueInstant="2018-12-21T14:31:54.505Z" Version="2.0"
  xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol">
</saml2p:Response>

Но пространства имен должны быть в порядке.

Значит, это должно быть что-то в ответе SAML?Как я могу найти проблему?

   private static Saml2AuthenticationOptions CreateSaml2Options()
    {
        var spOptions = CreateSpOptions();
        var saml2Options = new Saml2AuthenticationOptions(false)
        {
            SPOptions = spOptions
        };

        var idp = new IdentityProvider(new EntityId("XXX"), spOptions)
        {
            AllowUnsolicitedAuthnResponse = true,
            Binding = Saml2BindingType.HttpPost,
            SingleSignOnServiceUrl = new Uri("XXX")
        };

        saml2Options.IdentityProviders.Add(idp);

        return saml2Options;
    }

    private static SPOptions CreateSpOptions()
    {
        const string language = "cs-cz";

        var spOptions = new SPOptions
        {
            EntityId = new EntityId("app:vwg.skoda.nia"),
            AuthenticateRequestSigningBehavior = SigningBehavior.Always,
            ReturnUrl = new Uri("https://localhost:44390/Saml2/Acs")
        };

        var attributeConsumingService = new AttributeConsumingService
        {
            IsDefault = true,
            ServiceNames = { new LocalizedName("Saml 2 Authentication", "en") }
        };

        attributeConsumingService.RequestedAttributes.Add(new RequestedAttribute("Minimal"));

        spOptions.AttributeConsumingServices.Add(attributeConsumingService);

        var certPath = AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "/App_Data/XXX.pfx";
        var cert = new X509Certificate2(certPath, "XXX");
        spOptions.ServiceCertificates.Add(cert);

        return spOptions;
    }

1 Ответ

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

Sustainsys.Saml2.Exceptions.InvalidSignatureException: подпись проверена правильно с ключом, содержащимся в подписи, но этот ключ не является доверенным.

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

Необходимо добавить сертификат с открытым ключом idp в коллекцию IdentityProvider.SigningKeys.

...