Pregunta

Tengo un servicio de WCF que necesitará recibir las credenciales del cliente y mantener algún tipo de datos basados ??en roles, según mi método de autenticación.

Los clientes residirán en muchos sistemas diferentes y, como tal, cada cliente tendrá un ID de usuario y pw únicos.

Estoy usando basicHttpBinding y he leído algunos artículos, como este, http://nirajrules.wordpress.com/2009/05/22/username-over-https-custombinding-with-wcf%E2%80%99s-channelfactory-interface/ , que describen el proceso.

Por lo tanto, lo que busco es si alguien tiene un cliente / servidor completo configurado de esta manera para que pueda ver mi propia solución.

Lo que me gustaría hacer es pasar el nombre de usuario y la contraseña en los encabezados de cada solicitud, devolver algún tipo de excepción SecurityTokenValidationException si falla, o continuar si se pasa.

Gracias.

ACTUALIZAR

Estoy usando wsHttpbinding con la siguiente configuración tanto en el cliente como en el servidor:

  <wsHttpBinding>
    <binding name="wsHttpEndpointBinding" >
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="Basic" />
        <message clientCredentialType="UserName" />
      </security>
    </binding>
  </wsHttpBinding>

Y la llamada al servidor desde el cliente de la siguiente manera:

ServiceReference1.ServiceClient myClient = new ServiceReference1.ServiceClient();

myClient.ClientCredentials.UserName.UserName = "billuser";
myClient.ClientCredentials.UserName.Password = "mypassword";

Response.Write("Data from WCF Service: " + myClient.GetData(1));

Creo que necesito un poco de ayuda para vincular el CustomUsernamePasswordValidator en el servidor, ya que todavía tengo el mensaje '... no se pudo activar'. error.

¿Fue útil?

Solución

¿Está obligado a usar el basicHttpBinding? Ese enlace es realmente solo para proporcionar soporte para implementaciones de WS-BasicProfile heredadas (es decir, ASMX). Si sus clientes también son .NET / WCF, recomendaría usar wsHttpBinding, que proporciona una gran cantidad de opciones de seguridad listas para usar. Puede usar certificados, nombre de usuario / contraseña, etc. con el transporte y / o seguridad de mensajes y no necesita escribir ninguna de las cosas de seguridad usted mismo. Sólo configure-and-go (CAG).

La información de la credencial de seguridad está disponible para el servicio a través del OperationContext, en caso de que necesite acceder directamente desde su código. Sin embargo, si su código necesita acceder a él, recomendaría escribir un comportamiento para extraer la información pertinente de OperationContext y colocarlo en una aplicación más específica para que no tenga que hacer referencia a System.ServiceModel en todos los lugares a los que necesita acceder información sobre OperationContext.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top