Невозможно построить проекты IdentitySaml2 - PullRequest
0 голосов
/ 07 февраля 2019

Я пытаюсь реализовать единый вход, используя IdentitySaml2 для проверки подлинности, но проекты не создаются.Я использую .net Framework 4.7.2.

ОБНОВЛЕНО: Хотя я не смог построить решение с основным источником (ITfoxtec.Identity.Saml2).Мне удалось создать образец сайта и установить пакет nuget.Я также добавил файлы кода, такие как IdentityConfig, Authcontroller, DefaultClaimsAuthenticationManager и просмотры, и добавил параметры ниже в webconfig.Я не уверен в этих настройках и не нашел надлежащей документации.В настоящее время idpmedatadata создает исключение из-за неправильного URL.

<add key="Saml2:IdPMetadata" value="https://localhost:44305/metadata"/>
<add key="Saml2:Issuer" value="urn:itfoxtec:identity:saml2:testwebapp"/>
<add key="Saml2:SingleSignOnDestination" value="https://test-adfs.itfoxtec.com/adfs/ls/"/>
<add key="Saml2:SingleLogoutDestination" value="https://test-adfs.itfoxtec.com/adfs/ls/"/>
<add key="Saml2:SignatureAlgorithm" value="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
<add key="Saml2:SigningCertificateFile" value="~/App_Data/itfoxtec.identity.saml2.testwebapp_Certificate.pfx"/>
<add key="Saml2:SigningCertificatePassword" value="!QAZ2wsx"/>
<add key="Saml2:CertificateValidationMode" value="ChainTrust"/>
<add key="Saml2:RevocationMode" value="NoCheck"/>

1 Ответ

0 голосов
/ 07 февраля 2019

Можете ли вы быть более конкретным в отношении исключения?

Если вы создаете решение ASP.NET MVC .NET 4.7.2, вам следует использовать пакет ITfoxtec.Identity.Saml2.Mvc версии 3.0.0.Я ожидаю, что это не в приложении .NET Core.

Вы можете найти примеры ее: https://github.com/ITfoxtec/ITfoxtec.Identity.Saml2/tree/master/test

ОБНОВЛЕНО: Компонент ITfoxtec Identity Saml2, выступающий в качестве проверяющей стороны, может быть настроен с помощью илибез метаданных IdP.

Использование метаданных IdP

Для конфигурации доверия IdP нужны только метаданные:

<add key="Saml2:IdPMetadata" value="https://localhost:44305/metadata"/>

Загружены метаданные IdPв IdentityConfig.RegisterIdentity() как это:

var entityDescriptor = new EntityDescriptor();
entityDescriptor.ReadIdPSsoDescriptorFromUrl(new Uri(ConfigurationManager.AppSettings["Saml2:IdPMetadata"]));
if (entityDescriptor.IdPSsoDescriptor != null)
{
    Saml2Configuration.SingleSignOnDestination = entityDescriptor.IdPSsoDescriptor.SingleSignOnServices.First().Location;
    Saml2Configuration.SingleLogoutDestination = entityDescriptor.IdPSsoDescriptor.SingleLogoutServices.First().Location;
    Saml2Configuration.SignatureValidationCertificates.AddRange(entityDescriptor.IdPSsoDescriptor.SigningCertificates);
}
else
{
    throw new Exception("IdPSsoDescriptor not loaded from metadata.");
}

Метаданные могут быть загружены онлайн ReadIdPSsoDescriptorFromUrl(...) или из файла ReadIdPSsoDescriptorFromFile(...) или из строки ReadIdPSsoDescriptor(...)

НастроитьIdP без метаданных

Для доверия IdP требуются конечные точки входа и выхода IdP, а также сертификат подписи IdP:

<add key="Saml2:SingleSignOnDestination" value="https://some-idp.test.com/login/"/>
<add key="Saml2:SingleLogoutDestination" value="https://some-idp.test.com/logout/"/>
<add key="Saml2:SignatureValidationCertificate" value="~/App_Data/IdP_signing_certificate.crt"/>

Конфигурация IdP загружается в IdentityConfig.RegisterIdentity() следующим образом:

Saml2Configuration.SingleSignOnDestination = new Uri(ConfigurationManager.AppSettings["Saml2:SingleSignOnDestination"]);
Saml2Configuration.SingleLogoutDestination = new Uri(ConfigurationManager.AppSettings["Saml2:SingleLogoutDestination"]);

Saml2Configuration.SignatureValidationCertificates.Add(CertificateUtil.Load(HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["Saml2:SignatureValidationCertificate"])));

Идентификатор проверяющей стороны

Идентификатор проверяющей стороны unik:

<add key="Saml2:Issuer" value="urn:itfoxtec:identity:saml2:testwebapp"/>

Сертификат подписи

Требуемый алгоритм подписи, скорее всего, SHA-256:

<add key="Saml2:SignatureAlgorithm" value="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>

Вместо загрузки сертификата для подписи из файла, подобного следующему:

<add key="Saml2:SigningCertificateFile" value="~/App_Data/itfoxtec.identity.saml2.testwebapp_Certificate.pfx"/>
<add key="Saml2:SigningCertificatePassword" value="!QAZ2wsx"/>

Сертификат можно загрузить по отпечатку большого пальца из хранилища сертификатов Windows или сертификата TLS в службе приложений Azure:

<add key="SigningCertificateThumbprint" value="XXXXX...XXXXX"/>

Затем необходимо изменить IdentityConfig.RegisterIdentity(), чтобы загрузить сертификат по отпечатку:

Saml2Configuration.SigningCertificate = CertificateUtil.Load(StoreName.My, StoreLocation.CurrentUser, X509FindType.FindByThumbprint, ConfigurationManager.AppSettings["Saml2:SigningCertificateThumbprint"]);

Проверка сертификата

Цепочка сертификатов IdP и отзыв могут бытьпроверяется, если требуется.

Обычно цепочка сертификатов и отзыв не проверяются:

<add key="Saml2:CertificateValidationMode" value="None"/>
<add key="Saml2:RevocationMode" value="NoCheck"/>

Требуется проверить цепочку сертификатов и отзыв:

<add key="Saml2:CertificateValidationMode" value="ChainTrust"/>
<add key="Saml2:RevocationMode" value="Online"/>
...