with usuario password example domain custom contraseña and .net wcf http authentication http-authentication

.net - usuario - Autenticación mixta de WebFit de WCF(básica y anónima)



wcf usuario y contraseña (4)

Todo esto está relacionado con el enlace WebHttp, alojado en un Host de servicio personalizado (IIS no es una opción en este momento).

Implementé UserNamePasswordValidator personalizado y una IAuthorizationPolicy personalizada. Cuando configuro el enlace del punto final para usar la autenticación básica, todo funciona de la manera que me gustaría (principal personalizado, roles personalizados, etc.).

También me gustaría agregar la posibilidad de acceso HTTP anónimo, y hacer que mis implementaciones personalizadas pongan al usuario anónimo en algunas funciones predeterminadas, etc. (si no se envía un encabezado de autenticación).

Lo que sucede ahora es que a los usuarios anónimos se les da un 401 antes de que se golpee cualquiera de mis códigos personalizados. Si desactivo el requisito de autenticación HTTP básica, el encabezado Autenticar se ignorará por completo.

¿Cómo configuro o inserto un encabezado de autenticación para hacer esto de ambas formas (sin crear 2 puntos finales separados)?


Investigué esto anteriormente y descubrí que no es posible a través de la configuración a menos que crees 2 puntos finales separados (que no es lo que deseas). Simplemente, WCF no lo admite de manera inmediata.

Sin embargo, WCF es extremadamente personalizable y usted podría hacer esto escribiendo un canal personalizado / enlace que hará lo que quiera. Te recomiendo que eches un vistazo al código fuente de REST Chess . Debería comenzar.


Su mejor opción es implementar roles predeterminados a través de un proveedor de roles y permitir que los usuarios anónimos se unan automáticamente a ese rol. Luego, ya sea de forma programática o mediante una política de inyección de políticas (orientada a aspectos), se establece para que se permita cierto acceso anónimo a través del rol particular.

En cuanto a configurarlo a través de la configuración, si es posible, sería bastante difícil y algo así como "hacky".


No lo creo ... Solo escribí lo que necesita crear para separar el punto final cuando decidí leer su pregunta nuevamente y noté la última declaración de su pregunta. Entonces la respuesta sería no (que yo sepa)


En primer lugar, el servicio responde correctamente a la llamada anónima, de acuerdo con la especificación .

Segundo, esto es imposible. Cuando se autohospeda en su servicio y tiene un enlace HTTP, WCF utilizará una instancia de System.Net.HttpListener para poder responder a las solicitudes http (creadas en System.ServiceModel.Channels.SharedHttpTransportManager.OnOpen ). Este oyente tiene un método llamado HandleAuthentication que se llama way antes de llamar a cualquiera de sus códigos personalizados. Es responsable de devolver la respuesta 401 con el desafío (WWW-Authenticate). No hay nada que puedas hacer al respecto. Si hay, me gustaría saber.

Entonces te quedan las siguientes opciones:

  • dos puntos finales
  • configurar sus clientes para conocer las credenciales predeterminadas
  • cambia a tus clientes para que puedan responder al desafío