Estoy tratando de implementar la autenticación SAML2.0 usando IdentityServer4 y la biblioteca ITfoxtec.Identity.Saml2.
El primer paso es iniciar sesión a través de la conexión LDAP y esta parte funcionó bien y recibo reclamos de usuarios.
El siguiente paso es integrar el inicio de sesión con AD FS
Seguí principalmente este tutorial.
https://developer.okta.com/blog/2020/10/23/how-to-authenticate-with-saml-in-aspnet-core-and-csharp
El código de configuración de Saml está debajo
services.Configure<Saml2Configuration>(saml2Configuration => { saml2Configuration.AllowedAudienceUris.Add(saml2Configuration.Issuer); var entityDescriptor = new EntityDescriptor(); entityDescriptor.ReadIdPSsoDescriptorFromUrl(new Uri(Configuration["Saml2:IdPMetadata"])); if (entityDescriptor.IdPSsoDescriptor != null) { saml2Configuration.SingleSignOnDestination = entityDescriptor.IdPSsoDescriptor.SingleSignOnServices.First().Location; saml2Configuration.SignatureValidationCertificates.AddRange(entityDescriptor.IdPSsoDescriptor.SigningCertificates); } else { throw new Exception("IdPSsoDescriptor not loaded from metadata."); } }); services.AddSaml2();Después de la redirección del servidor y antes de mostrar la página de inicio de sesión de Idp, tengo un error "el certificado no está configurado correctamente al final de la aplicación"
Esta es la primera vez que trato con el protocolo SAML. Cualquier ayuda es apreciada.
Editar: el error está en el lado de AD FS
Para obtener más información, consulte la documentación de ITfoxtec.Identity.Saml2 y una muestra de ASP.NET Core .
Tengo dudas donde ves el error. ¿Está en la aplicación IdentityServer4 o en AD FS?
La configuración que muestra lee los metadatos de AD FS y establece la configuración de IdP. También debe cargar la configuración del usuario de confianza.
services.Configure<Saml2Configuration>(Configuration.GetSection("Saml2"));y configure el certificado de firma de la parte de confianza, por ejemplo, así
saml2Configuration.SigningCertificate = CertificateUtil.Load(AppEnvironment.MapToPhysicalFilePath( Configuration["Saml2:SigningCertificateFile"]),La configuración juntos
services.Configure<Saml2Configuration>(Configuration.GetSection("Saml2")); services.Configure<Saml2Configuration>(saml2Configuration => { saml2Configuration.SigningCertificate = CertificateUtil.Load(AppEnvironment.MapToPhysicalFilePath( Configuration["Saml2:SigningCertificateFile"]), Configuration["Saml2:SigningCertificatePassword"]); saml2Configuration.AllowedAudienceUris.Add(saml2Configuration.Issuer); var entityDescriptor = new EntityDescriptor(); entityDescriptor.ReadIdPSsoDescriptorFromUrl(new Uri(Configuration["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."); } }); services.AddSaml2();Observación
Para resolver una situación como la suya, he creado FoxID que admiten OpenID Connect y se pueden conectar a un AD FS con SAML 2.0. FoxIDs maneja la conversión entre OpenID Connect y SAML 2.0. En realidad, los FoxID también usan la biblioteca ITfoxtec.Identity.Saml2.