Esto es bastante similar a mi pregunta: "What should we implement to authorize clients to use our web service?"
Al final no publicar el WSDL y sólo sirviendo el servicio a través de https y que requieren basic authentication. NO use autenticación básica si no puede obligar a todos los clientes a usar https.
Si se trata de un servicio web .net, aquí está la entrada del archivo de configuración para evitar que se publique el wsdl.
<system.web>
<webServices>
<protocols>
<remove name="Documentation" />
</protocols>
</webServices>
</system.web>
Cuando Ir a la página, recibirá un mensaje de error similar al mensaje se obtendría si se trató de tirar de forma manual por un web.config de un sitio. Como Steven señala, esto es seguridad a través de la oscuridad y NO debe usarse solo para proteger su servicio web. Sin embargo, cuando se usa además de auth + https básico, es un pequeño extra.
Clientes Código lateral:
Para acceder a este servicio web de un cliente, añada su web de referencia de la forma habitual y en el código de llamada (asumiendo que su web de referencia se denomina webref).
WebRef.Url = "url";
WebRef.Credentials = new System.Net.NetworkCredential("userid", "password");
Además, es posible que desee consultar WebRef.PreAuthenticate para guardar algunos viajes redondos. Solo ten en cuenta que te divertirás probando eso si estás detrás de un proxy corporativo. Los proxies se utilizan a través de WebRef por
WebRef.Proxy = new WebProxy("url");
WebRef.Proxy.Credentials = new System.Net.NetworkCredential("userid", "password");
Por ID de sesión, ¿se refiere a la seguridad basada en token? Eso es lo que típicamente oigo a lo que se hace referencia. También ese "primer método" puede ser muy diferente y completamente ineficaz dependiendo de cómo lo configure. Es decir. Autenticación básica sin HTTPS que no tiene valor ya que el inicio de sesión y la contraseña se envían en texto sin formato. –
Más o menos, aunque puede ser tan simple como un GUID. Lo que importa es que es grande y efectivamente aleatorio, por lo que no puede ser afectado. No necesita enviar nada en texto sin formato, tampoco.Por ejemplo, podría llamar a GetChallenge para recibir un GUID, luego llamar a LoginWithResponse, pasar ese GUID, junto con el nombre de la cuenta de texto claro y el hash de la concatenación del GUID, la cuenta y la contraseña. O, por supuesto, podría usar HTTPS, que lo resuelve desde otra dirección. –