Non è facile. In definitiva, stai distribuendo l'applicazione Silverlight agli utenti e, se questi utenti desiderano esaminare le sue comunicazioni, possono farlo.
Se non fai nulla per proteggerlo, è semplice come eseguire un proxy come Fiddler e basta vedere quali URL colpisce e quali parametri passa.
Se fai fai dei passi per proteggerlo, tieni presente che, poiché gli utenti hanno l'eseguibile, possono eseguirne il reverse engineering. Non ho smontato un'applicazione Silverlight ma presumo che, come altri assembly .NET, non è un processo particolarmente difficile.
Ma se vuoi mettere un ostacolo all'ingresso che garantisca almeno che solo le persone disposte a fare un vero sforzo possano decodificarlo, fai qualcosa di simile:
- Coppia di chiavi pubblica / privata; la chiave pubblica è nell'app, la chiave privata sul tuo server
- Tutte le chiamate WCF includono un parametro che è gli altri parametri concatenati e quindi crittografato con la chiave pubblica
- Il server verifica questo parametro su tutte le chiamate
Se vuoi fare un altro passo per proteggersi dagli attacchi di replay, aggiungi un parametro di timestamp a tutte le chiamate di servizio. Anche questo timestamp (che è concatenato insieme agli altri parametri prima della crittografia) viene controllato; consentire un margine di manovra per gli orologi che non sono sincronizzati, ma se è diverso da qualche minuto rispetto all'orologio del server, rifiuta la chiamata.
Ma prima di passare troppo tempo a fare tutto questo, ancora una volta, non aspettarti che sia infallibile.