2012-09-06 23 views
6

En IIS, puedo "ignorar", "permitir" y "exigir" certificados de cliente.ASP.NET WebApi - ¿Cómo puedo "permitir", pero no "exigir" certificados de cliente?

En ASP.NET WebAPI (versión 4.0 que acabo de lanzar hace un tiempo), parezco tener la capacidad de solo "ignorar" o "requerir".

Por defecto, los certificados de cliente son ignorados ... así que esta declaración siempre produce nulo:

var cert = actionContext.Request.GetClientCertificate(); 

Pero, si establece este indicador en mi config:

config.ClientCredentialType = HttpClientCredentialType.Certificate; 

Entonces consigo la certificado de cliente ... pero ya no tengo la capacidad de permitir el acceso anónimo.

Mi cliente anónimo ahora recibe un error 403: "El servidor remoto devolvió un error: (403) Prohibido".

¿Puedo hacer una especie de "permitir" como en IIS?

+0

¿Ha intentado utilizar el código del modelo de identidad que se trata aquí? http: //leastprivilege.com/2012/08/20/support-for-x-509-client-certificates-in-thinktecture-identitymodel-for-web-api/... Tal vez este enfoque junto con el uso del El atributo AllowAnonymous puede ayudar? http://www.davidhayden.me/blog/asp.net-mvc-4-allowanonymous-attribute-and-authorize-attribute puede ayudar? –

Respuesta

2

Esto es una limitación conocida con el uso de certificado X509 en el escenario mismo de acogida. La limitación real proviene de la vinculación de transporte subyacente en WCF, que no tiene la opción de permitir con respecto al certificado de cliente.

Puede, sin embargo, permitir múltiples esquemas de autenticación con otras opciones, como anonymous y windows. Estamos trabajando con el equipo WCF para averiguar si podemos agregar ese soporte con certificado anónimo y x509 también.

Espero que esto aclare.

0

¿Podría ser que el certificado proporcionado no sea válido? Si ese es el caso, lo siguiente puede ayudar: RemoteCertificateValidationCallback

+0

El error 403 no provino de un certificado no válido ... viene en caso anónimo ... es decir, no certifica en absoluto. –

+0

Ah, interpreté mal esa parte. ¿Lanza la excepción en el código? ¿Hay una excepción interna? –

+0

Lamentablemente, no. El error sin certificado es el mismo que con un certificado no válido ... básicamente, parece que si solicita un certificado, lo convierte en "obligatorio". –

Cuestiones relacionadas