Questo è abbastanza simile alla mia domanda: "What should we implement to authorize clients to use our web service?"
abbiamo finito per non pubblicare il WSDL e solo servendo il servizio via https e che richiedono basic authentication. NON utilizzare l'autenticazione di base se non è possibile forzare tutti i client a utilizzare https.
Se questo è un servizio Web .net, ecco la voce del file di configurazione per impedire la pubblicazione di wsdl.
<system.web>
<webServices>
<protocols>
<remove name="Documentation" />
</protocols>
</webServices>
</system.web>
Quando si goto pagina, riceverai un messaggio di errore simile al messaggio che si otterrebbe se si è tentato di tirare manualmente giù un web.config da un sito. Come sottolinea Steven, questa è sicurezza attraverso l'oscurità e NON deve essere usato da solo per proteggere il tuo servizio web. Tuttavia, se utilizzato in aggiunta a auth + https di base, è un piccolo extra in più.
client codice lato:
Per accedere a questo servizio Web da un client, aggiungere il riferimento Web il modo normale e nel codice chiamante (supponendo che si chiama il vostro riferimento web WebRef).
WebRef.Url = "url";
WebRef.Credentials = new System.Net.NetworkCredential("userid", "password");
Inoltre, è possibile esaminare WebRef.PreAuthenticate per salvare alcuni viaggi di andata e ritorno. Tieni semplicemente presente che ti divertirai a provarlo se sei dietro un proxy aziendale. I proxy vengono utilizzati tramite il WebRef da
WebRef.Proxy = new WebProxy("url");
WebRef.Proxy.Credentials = new System.Net.NetworkCredential("userid", "password");
fonte
2009-07-07 13:58:41
Per ID di sessione, si fa riferimento alla sicurezza basata su token? Questo è quello che in genere sento nominare. Anche questo "primo metodo" può essere molto diverso e completamente inefficace a seconda di come lo imposta. Cioè Autenticazione di base senza HTTPS che non ha alcun valore poiché il login e la password sono inviati in testo normale. –
Un po ', anche se può essere semplice come un GUID. Ciò che importa è che è grande ed efficacemente casuale, quindi non può essere complicato. Non è necessario inviare nulla nemmeno in testo normale.Ad esempio, è possibile chiamare GetChallenge per ricevere un GUID, quindi chiamare LoginWithResponse, passare il GUID, insieme al nome dell'account cleartext e all'hash della concatenazione di GUID, account e password. O, naturalmente, potresti usare HTTPS, che lo risolve da un'altra direzione. –