Pregunta

Si Estoy recibiendo un servicio WCF para que alguien (es decir, alguien a quien conozco) puede consumir mi servicio, pero lo que si otra persona (es decir alguien que no sé) lo consume a continuación, podría hacer? ¿Cómo puedo evitar eso? ¿Cómo se puede lograr esto?

¿Se puede hacer a través de estrangulación de servicio o cuáles son las otras maneras de lograr esto?

¿Fue útil?

Solución

No, no hay ningún mecanismo en WCF para permitir que ciertos clientes la utilización de su servicio, mientras que prohíbe los demás. Tendrá que abordar esto desde un ángulo diferente.

Una forma es publicar no automáticamente los metadatos de su servicio - por ejemplo, que sea casi "invisible" - y luego distribuir la información de metadatos necesarios en forma de uno o varios WSDL y uno o varios archivos XSD a aquellos clientes que desee conectarse a su servicio. Si los metadatos no está disponible, alguien sólo está navegando a su dirección de servicio no recibirá información sobre qué llamar.

El intercambio de metadatos es controlada por el comportamiento <serviceMetadata>, y por tener un punto final "MEX" en su servicio. Retire los dos y su servicio es invisible.

La otra forma sería la de prohibir cualquier usuarios externos acceder a su servidor WCF basado en servidores de seguridad y normas de la red. Esto no se puede hacer por la WCF, pero el administrador de red puede limitar qué IP de tener acceso físico a la máquina donde se ejecuta el servicio de WCF.

Marc

ACTUALIZACIÓN:
Con el fin de enviar metadatos a los usuarios que deben ser capaces de llamar a su servicio, puede hacer una de dos cosas:

1) El uso de svcutil.exe /t:metadata (path+name of your service assembly), puede extraer los metadatos de su ensamblaje servicio (por ejemplo MyServiceLibrary.dll). Esto le dará una o varias WSDL y uno o varios archivos XSD, que es necesario para enviar a sus usuarios previstos. Pueden poner estos archivos en algún lugar de su disco duro y luego en la opción "Agregar referencia de servicio", en lugar de introducir la URL para descubrir el servicio, pueden escribir el nombre del WSDL principal (que importa todos los otros archivos) y que van a obtener su proxy de cliente.

O:

2) Con el servicio en funcionamiento, se puede "Agregar nuevo proyecto" para su solución, elija una biblioteca de clases (MyService.Client), y luego hacer un "Agregar referencia de servicio" e introducir la URL de su servicio. Esto creará todos los archivos y todo lo necesario en su nueva biblioteca de clases. Compilar esta biblioteca de clases y la nave que el montaje MyService.Client.dll a los usuarios que desea permitir el acceso a su servicio.

Con ambas soluciones, usted no necesita tener habilitado el intercambio de metadatos, y la otra persona no puede caminar hasta su servicio y obtener toda la información necesaria con el fin de llamar a él.

Otros consejos

Si quieres algunas algunos clientes sean capaces de utilizar (o vista) su servicio y algunos clientes a no estar autorizados a utilizar (o vista) su servicio, entonces usted necesita para la autenticación de configuración en su servicio de modo que sólo los clientes que permitir el acceso lata (o vista) su servicio.

No sé toda su escenario, pero la seguridad de transporte con la autenticación básica probablemente sería suficiente. Para habilitar que podría desactivar el acceso anónimo en IIS, configurar IIS para utilizar autenticación básica y luego en el conjunto de configuración de enlace:

<security mode="Transport">
  <transport clientCredentialType="Basic" />
</security>


Establecer sus mex unión a utilizar la unión segura en lugar de la mexHttpBinding defecto. También se necesita un certificado SSL para su sitio (si se utiliza wsHttpBinding).

ACTUALIZACIÓN: He aquí una muestra, seguro de metadatos personalizados de punto final que muestra cómo implementar un servicio con un punto final metadatos seguro.

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