Можете ли вы быть более конкретным в отношении исключения?
Если вы создаете решение 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"/>