Ceci est assez similaire à ma question: "What should we implement to authorize clients to use our web service?"
Nous avons fini par ne pas publier le WSDL et seulement au service le service via https et nécessitant basic authentication. N'utilisez PAS d'authentification de base si vous ne pouvez pas forcer tous les clients à utiliser https.
S'il s'agit d'un service Web .net, voici l'entrée du fichier de configuration pour empêcher la publication du fichier wsdl.
<system.web>
<webServices>
<protocols>
<remove name="Documentation" />
</protocols>
</webServices>
</system.web>
Lorsque vous goto la page, vous recevrez un message d'erreur semblable au message que vous obtiendriez si vous avez essayé de tirer manuellement vers le bas un web.config à partir d'un site. Comme Steven souligne, c'est la sécurité par l'obscurité et ne devrait pas être utilisé par lui-même pour sécuriser votre service Web. Cependant, lorsqu'il est utilisé en plus de auth + https de base, c'est un joli petit extra.
client Code Side:
Pour accéder à ce service Web à partir d'un client, ajoutez votre référence web de manière normale et dans le code d'appel (en supposant que votre référence Web est nommé WebRef).
WebRef.Url = "url";
WebRef.Credentials = new System.Net.NetworkCredential("userid", "password");
De même, vous pouvez chercher dans WebRef.PreAuthenticate pour économiser quelques allers-retours. Juste être prévenu que vous aurez un moment amusant de tester si vous êtes derrière un proxy d'entreprise. Les proxies sont utilisés via le WebRef par
WebRef.Proxy = new WebProxy("url");
WebRef.Proxy.Credentials = new System.Net.NetworkCredential("userid", "password");
Par ID de session, faites-vous référence à la sécurité basée sur les jetons? C'est ce que j'entends généralement appelé. En outre, cette "première méthode" peut être très différente et complètement inefficace en fonction de la manière dont elle l'a mise en place. C'est à dire. Authentification de base sans HTTPS qui n'a aucune valeur puisque le login et le mot de passe sont envoyés en texte brut. –
Sorte de, bien qu'il puisse être aussi simple qu'un GUID. Ce qui compte, c'est que ce soit gros et effectivement aléatoire, donc on ne peut pas l'engager. Vous n'avez pas non plus besoin d'envoyer quoi que ce soit en texte brut.Par exemple, vous pouvez appeler GetChallenge pour recevoir un GUID, puis appeler LoginWithResponse, en passant ce GUID, avec le nom du compte cleartext et le hachage de la concaténation du GUID, du compte et du mot de passe. Ou, bien sûr, vous pouvez utiliser HTTPS, qui le résout d'une autre direction. –