2012-07-05 18 views
5

Hay una instancia de Dynamic CRM en un servidor ("en premisa"). Será utilizado por algunos sitios que se ejecutan en máquinas distantes (otro dominio, otro Active Directory). La comunicación entre estos sitios y la instancia de CRM se realiza a través de un proxy CRM, un servicio WCF que se encuentra cerca de él (cerca CRM), gestiona las solicitudes, consultas, etc. CRMWCF: Servicio de autenticación o seguridad basada en token?

Ese servicio WCF se enfrenta a Internet. Aunque los canales de comunicación seguros no son tan necesarios, la autenticación sí lo es. No podemos permitir que los clientes aleatorios usen los servicios provistos por el proxy de CRM.

Entonces, Servicio de Autenticación (¿cookies?)/Pase de token codificado a mano (como parámetro para cada operación de servicio)/this solution - on stackoverflow.

¡Gracias de antemano!

PD: los tokens codificados a mano son "sensibles al tiempo" y hash varias veces con algunas claves secretas. Man-in-the-middle podría no ser un gran problema, ya que un token puede invalidarse después de una solicitud.

Respuesta

8

El pase de token codificado a mano no es muy elegante. Contamina las firmas de tu método y te hace duplicar cheques por todos lados.

Si puede distribuir las credenciales a sus clientes de servicio, o pasar las credenciales que ya usan para su sistema, entonces sugiero usar la seguridad de los mensajes con un nombre de usuario personalizado & validador de contraseñas.

Los pasos para implementarlo are simple enough. Sólo es necesario implementar un UserNamePasswordValidator:

Un breve resumen de la configuración del artículo enlazado:

especificar el modo de seguridad en su unión:

<security mode="Message"> 
    <message clientCredentialType="UserName"/> 
</security> 

En su comportamiento en servicio Añadir:

<serviceCredentials> 
    <userNameAuthentication 
     userNamePasswordValidationMode="Custom" 
     customUserNamePasswordValidatorType="YourFullUserNameValidatorType"/> 
</serviceCredentials> 

Luego los clientes solo necesitan establecer sus credenciales directamente en los servidores proxy de servicio. Por lo tanto, no se pasan en las operaciones de servicio.

serviceClient.ClientCredentials.UserName.UserName = "username"; 
serviceClient.ClientCredentials.UserName.Password = "password"; 

Su UserNamePasswordValidator conseguirán estos credenciales para cada llamada operación de servicio y usted tendrá la oportunidad de validaciones, de su tienda de credenciales.

Sin embargo, para mayor seguridad, puede consultar certificate authentication. Es más confiable y no está obligado a comprar un certificado de una CA. Si también puede configurarse como CA en las computadoras cliente, entonces es bueno que se vaya. Es apropiado especialmente porque solo tiene unos pocos clientes, por lo que sería fácil de administrar.

Cuestiones relacionadas