sabato 2 luglio 2011

WCF Basic Authentication

Ultimamente ho avuto a che fare con un WebService che richiede esplicitamente la Basic Authentication.
Il mio client è in C# .Net 4.0, e quindi usa le Windows Communication Foundation.
Il protocollo HTTP, per quanto riguarda la Basic Authentication assume che il client debba authenticarsi con una username ed una password per ciascun realm (vedi qua). In pratica deve essere aggiunto, in modo esplicito uh Header alla chiamata HTTP contenente username e password encodate in base64.

Per un WebService client pensavo che fosse sufficiente impostare il tipo di autenticazione (Basic) e settare le credenziali. Purtroppo, facendo la chiamata, ottenevo sempre un errore di autenticazione. Verificando con un proxy http il messaggio che viene composto, mi sono accorto che l'Header non viene aggiunto automaticamente alla chiamata. Non ho verificato, lo ammetto, se questo è un bug del framework .Net o se è il comportamento standard.

Il problema si risolve comunque aggiungendo l'Header "a mano" nella chiamata. Per i WebServices WCF non si usa direttamente l'oggetto client, ma si lavora sull'operation scope, acquisendo da qui la request ed aggiungendo a questa l'autenticazione. L'esempio me lo ha dato questo articolo, che ringrazio dal profondo del cuore.

English translation here