2013-06-21 13 views
5

Sto costruendo un programma client che interagisce con un servizio WCF via Internet. Tutto funziona come previsto ma mi chiedo come posso proteggere i miei servizi in modo che solo il mio programma client possa farne uso?Servizio WCF: come proteggere in modo che solo i miei clienti possano usarlo?

Al momento tutti gli utenti con l'URL corretto per i miei servizi possono utilizzarlo con WCFTestClient (ad esempio).

Qual è il modo migliore per renderlo privato in modo che solo i miei clienti possano usufruire del servizio? Stringhe di token rotanti? Certificato? Parola d'ordine?

Non ho idea e non ho trovato nulla di utile su Internet.

migliori saluti

UPDATE: Il programma client è destinato ad essere scaricato per il pubblico (tutti). Quindi non è per uso interno, sarà un servizio che forniremo, quelli in produzione ufficiale.

Il mio pensiero era: Bind un certificato nei miei programmi client (se è possibile anche?). Su IIS in cui è in esecuzione il servizio WCF, verificare la presenza di un certificato valido. È possibile? O soluzioni migliori là fuori?

+1

http://msdn.microsoft.com/en-us/ magazine/cc163570.aspx – Rohit

+0

In IIS è possibile abilitarlo in modo che solo un IP noto di un client o intervallo IP possa chiamarlo. Un lungo con SSL, credenziali ecc elencato sotto – Kyle

+0

Ciao Kyle, scusa il mio non ero abbastanza specifico. Il programma client, quelli in produzione, dovrebbe essere per tutti. Quindi non conosco gli indirizzi IP dei client. Fondamentalmente lo voglio in questo modo, che il mio cliente abbia qualche tipo di autenticazione contro il servizio, quindi i servizi sono bloccati per pubblico/ospiti. – user1281991

risposta

1

Protect .net Web Service URL

Insieme con le altre risposte, che non può essere troppo male, e se si vuole essere super attento è possibile implementare un sistema di token, dove i clienti ottengono il primo token da te, ogni richiesta restituisce un nuovo token e tu controlli sempre un client rispetto al token corrente (ma è troppo attento a mio avviso)

Aggiornamento: perché è per il pubblico, il client può avere un modo di generare un token valido per controllare sul server, puoi avere un token be va coperchio per un intervallo di secondi, quindi anche se le persone hanno catturato la richiesta e trovato il token, non sarà valido dopo ..15 secondi o 30, ecc.

+0

Ciao Royi, ho anche pensato all'idea del token. Ma ho una domanda al riguardo. Dovrei quindi passare il token in ogni metodo che utilizzo con il servizio WCF? O c'è un altro modo per implementarlo? – user1281991

+0

Si crea un generatore di token, in base al tempo o in base a qualcosa che sta cambiando ma è sempre lo stesso nel client e nel server e si passa quel token a ogni richiesta, può anche essere e deve dipendere dalle informazioni del client, il server genera solo lo stesso token e controlla entrambi i token. ma sì, dovrai inviare il token ad ogni richiesta :) –

+0

Ok, grazie mille Royi. Questo è stato pensato. Speravo in un modo più intelligente però: D – user1281991

1

Se si utilizza l'autenticazione Form allora è possibile sfruttare l'ASP.NET per verificare la presenza di FormAuthentication Cookie consentendo AspNetCompatibilityRequirementsMode al Richiesto

Oppure, se il servizio è stand alone cioè viene consumato da tutti quindi è possibile utilizzare l'autenticazione OAuth Potete leggere di più su di esso Oauth Authentication

Quello che potreste fare è che ci sarebbe una chiave segreta del consumatore che sarebbe condivisa con tutti i client autenticati. Il chiamante firmerebbe alcune informazioni usando questa chiave e il server firmerebbe anche usando la stessa chiave e quindi la confronterà.

Speranza che aiuta

Problemi correlati