Cómo personalizar Microsoft.Owin.Security.OAuth para utilizar un certificado sin que IIS lo valide.
Espero estar haciendo la pregunta correctamente.
Tengo el siguiente caso de uso. Tengo una aplicación que quiero ejecutar en https y que el usuario pase un x509. Sin embargo, quiero enviar esa autenticación a un LDAP externo y no quiero que IIS autentique/verifique el certificado.
Si entro en IIS y lo configuro para aceptar/requerir, obtengo un error 403. Si no lo requiero, nunca me solicita el certificado.
Mi clase de inicio se ve así:
public class Startup {
public void Configuration(IAppBuilder app) {
app.UseClientCertificateAuthentication(new DefaultClientCertificateValidator());
}
}
Luego tengo:
public class DefaultClientCertificateValidator : IClientCertificateValidator {
public ClientCertificateValidationResult Validate(X509Certificate2 certificate) {
Console.WriteLine($"Intentando validar el certificado {certificate.SubjectName}");
// Por ahora, solo devuelvo true
ClientCertificateValidationResult res = new ClientCertificateValidationResult(true);
return res;
}
}
Si no paso un certificado, se produce un error porque no pudo encontrar un certificado. Sin embargo, si intento enviar un certificado, obtengo el error del servidor:
403 – Prohibido: El acceso está denegado.
No tiene permiso para ver este directorio o página utilizando las credenciales que ha proporcionado.
¿Hay algo en IIS que deba hacer para decir básicamente “Obtén el certificado, envíalo pero NO lo autentiques”?
davy.ai
Basándose en el caso de uso proporcionado, parece que el usuario desea utilizar un servidor LDAP externo para la validación del certificado del cliente en lugar de IIS. Para lograr esto, se pueden seguir los siguientes pasos:
UseClientCertificateAuthentication
con un validador personalizado que enviará el certificado al servidor LDAP externo para su validación.Validate
del validador personalizado, realizar la llamada LDAP necesaria para validar el certificado. Si el certificado es válido, devolvertrue
como resultado de la validación. De lo contrario, devolverfalse
.Para desactivar la autenticación del certificado del cliente en IIS:
Para modificar la clase de inicio de OWIN para la autenticación del certificado del cliente:
Cabe destacar que el código anterior asume que la lógica de validación LDAP ha sido implementada en el método
Validate
de la claseDefaultClientCertificateValidator
.Al establecer que IIS ignore los certificados de cliente, el middleware en la clase de inicio de OWIN podrá recuperar el certificado del cliente de la solicitud. Luego, el validador personalizado puede validar el certificado con el servidor LDAP externo y devolver un resultado de validación, que determinará si la cadena de middlewares continúa procesando la solicitud o devuelve un error 403.