Используйте Saml2 или Ws Federation для аутентификации в IDM SAP и ADFS - PullRequest
0 голосов
/ 25 октября 2019

Недавно у меня появилось новое требование, в котором мне нужно разрешить пользователю проходить аутентификацию в моем приложении IDM SAP. Ранее мне приходилось интегрировать свое приложение с ADFS. Для этого я использовал Ws Federation, и приложение работает на Asp Net Core. Аутентификация с помощью ADFS работает просто отлично, при запуске я заставляю мое приложение получать XML-файл метаданных с сервера Idp. Затем я перенаправляю пользователя на страницу входа в Idp, он проверяет, сработала ли аутентификация, возвращает ответ, а затем открывает мое приложение.

Теперь я провел небольшое исследование, чтобы понять, как я могу это сделать. то же самое с IDM SAP. Я немного запутался, когда увидел статьи, сравнивающие SAML с WS Federation. Что делает меня еще более запутанным, так это то, что клиент уже предоставил свой файл метаданных xml, и он очень похож на другой, использующий ADFS.

Вот как я реализовал Ws Federation:

services
                    .AddAuthentication(sharedOptions =>
                    {
                        sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                        sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
                    })
                    .AddWsFederation(options =>
                    {
                        options.Wtrealm = appSettings.Adfs.Wtrealm;
                        options.MetadataAddress = appSettings.Adfs.MetadataAddress;
                        options.RequireHttpsMetadata = false;
                    })
                    .AddCookie(); 

URL-адрес Idp находится в моем файле appSettings.

Мне пришло в голову, что я должен попытаться прочитать этот новый XML-файл, предоставленный из локальной папки, но это свойство "MetadataAddress ", кажется, всегда ожидает только URL-адреса. Пользователь IDM Sap уже сказал, что не будет предоставлять свой XML-файл, поэтому мне придется всегда читать из локального XML-файла.

Это не сработало, поэтому теперь я пытаюсь выяснить,Мой вариант будет заключаться в реализации более одного протокола в моем приложении.

До сих пор я нашел эту библиотеку, которая, кажется, является решением https://github.com/Sustainsys/Saml2/blob/master/Samples/SampleAspNetCore2ApplicationNETFramework/Startup.cs

Я застрял при попытке установитьXML-файл в методе StartUp. Это то, что я пытаюсь:

                    .AddSaml2(options =>
                    {
                        options.SPOptions.EntityId = new EntityId("mine.metadata.xml");
                        options.IdentityProviders.Add(
                            new IdentityProvider(
                                new EntityId("mine.metadata.xml"), options.SPOptions)
                            {
                                LoadMetadata = true
                            });

                        options.SPOptions.ServiceCertificates.Add(new X509Certificate2(@"mine.metadata.xml"));
                    })

Возвращает ошибку при попытке установить сертификат службы о том, что не удалось найти указанный файл.

Кроме того, давайте представим, что я установил конфигурацию. Как мне перенаправить пользователя на страницу входа в IDM Sap?

Может ли кто-нибудь дать какой-нибудь совет или руководство, чтобы я мог создать лучшее решение, которое работает в обоих случаях?

...