Как получить претензии из Idp-инициированного входа в систему с помощью Sustainsys Saml2? - PullRequest
1 голос
/ 20 апреля 2020

Я пытаюсь добавить поддержку аутентификации SAML для ASP. NET Core MVC приложения с ASP. NET Core Identity (не IdentityServer). Поток «работает» при тестировании с StubIdp - SAMLResponse POST помещен в /Saml2/Acs, и я перенаправлен в приложение с Identity.External cook ie, но мой ClaimsPrincipal пуст и не аутентифицирован. Даже если я использую NameID пользователя, который уже существует в базе данных, заявки полностью пусты.

В журнале консоли я также вижу следующее:
Sustainsys.Saml2.AspNetCore2.Saml2Handler: Information: Successfully processed SAML response Microsoft.IdentityModel.Tokens.Saml2.Saml2Id and authenticated JohnDoe

Я установил пакет Sustainsys.Saml2.AspNetCore2 и добавил конфигурацию службы в startup.cs следующим образом:

services.AddAuthentication()
                .AddSaml2(async options =>
                {
                    var azureServiceTokenProvider = new AzureServiceTokenProvider();
                    var keyVaultClient = new KeyVaultClient(
                        new KeyVaultClient.AuthenticationCallback(
                            azureServiceTokenProvider.KeyVaultTokenCallback));

                    var certificateSecret = await keyVaultClient.GetSecretAsync($"https://{Configuration["KeyVaultName"]}.vault.azure.net/", Configuration["ServiceProviderCertName"]);
                    var privateKeyBytes = Convert.FromBase64String(certificateSecret.Value);

                    options.SPOptions.EntityId = new EntityId(Configuration["BaseUrl"] + "/Saml2");
                    options.SPOptions.ReturnUrl = new Uri(Configuration["BaseUrl"]);

                    IdentityProvider idp = new IdentityProvider(
                            new EntityId("https://stubidp.sustainsys.com/Metadata"), options.SPOptions)
                    {
                        LoadMetadata = true,
                        MetadataLocation = "https://stubidp.sustainsys.com/Metadata",
                        AllowUnsolicitedAuthnResponse = true
                    };

                    options.IdentityProviders.Add(idp);

                    options.SPOptions.ServiceCertificates.Add(new X509Certificate2(privateKeyBytes));
                });

Configuration["BaseUrl"] - это базовый URL моего приложения, в данном случае это порт localhost.

Я явно что-то упускаю, но не могу понять, что. Нужно ли каким-то образом явно подключать / сопоставлять службу Saml2 с ASP. NET Core Identity?

1 Ответ

1 голос
/ 21 апреля 2020

удалось решить эту проблему на основе комментариев в этой проблеме GitHub .

Мой комментарий, объясняющий, как мне удалось реализовать обходной путь: https://github.com/Sustainsys/Saml2/issues/1030#issuecomment -616842796

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...