I SOAP Headers permettono ad un client che si collega ad un web service di inviare informazioni aggiuntive, come per esempio Username e Password di un utente, o altre informazioni ?sendibili?. Queste informazioni vengono aggiunte alla richiesta del web service. Il vantaggio è che gli header possono essere inviati solo da un client, e non possono essere impostati dall?interfaccia web pubblica che fornisce il .NET Framework
Costruire il servizioPer poter implementare un Soap Header dobbiamo importa il namespace
System.Web.Services.Protocols.
//C#
using System.Web.Services.Protocols;
//VB.NET
Imports System.Web.Services.Protocols;
Ora per poter implementare il nostro header dobbiamo creare una classe derivata dalla classe SoapHeader E aggiungere i nostri due oggetti Username e Password.
// SOAP Header per l'autenticazione
public class myHeader : SoapHeader
{
// Username utente
public string Username;
// Password utente
public string Password;
}
A questo punto dobbiamo creare nel nostro servizio un metodo che controlli le nostre credenziali di accesso, per far ciò creiamo un istanza che fa riferimento a myHeader, e poi la utilizziamo nella nostra funzione, in questo modo:
// SOAP Header per l'autenticazione
public myHeader sHeader;
A questo punto per poter utilizzare l?header nei notri metodi, per ognuno dobbiamo specificare, oltre all?attributo webmethod, anche l?attributo SoapHeader(), indicando il nome dell?oggetto header, in questo modo:
[WebMethod(Description="Metodo che controlla l'header di autenticazione")]
[SoapHeader("sHeader")]
Ora costruiamo la nostra funzione, nella quale controlleremo l?header inviato dal client. Per ricavare la username e la password del nostro header, non dobbiamo fare altro che utilizzare il nostro oggetto SoapHeader myHeader:
//Ricavo login e password
string usr = sHeader.Username;
string pwd = sHeader.Password;
adesso posso creare tutti i controlli che voglio sulla login e password, database, windows authentication, chi più ne ha più ne metta.
Il servizio via interfaccia web si presenta in questo modo:
Come si vede non c?è indicazione degli header di autenticazione, che troviamo invece nelle dichiarazioni SOAP del servizio:
Costruire il clientOra che abbiamo costruito il nostro servizio dobbiamo implementare il client per vedere dei risultati. Per poter utilizzare il nostro web service e il soap header dobbiamo creare i rispettivi 2 oggetti:
// Oggetto web services con i dati dell'utente
soapHeadercsharp.service1 myService = new soapHeadercsharp.service1();
// Header Soap per l'autenticazione dell'utente
soapHeadercsharp.myHeader myHeader = new soapHeadercsharp.myHeader ();
Una volta creati i due oggetti li posso utilizzare nella mia applicazione client, prima impostando i valori del mio header, poi assegnandolo all?oggetto sHeader dell?oggetto myService, e in seguito richiamando il metodo del servizio, in questo modo:
myHeader.Username = strLoginUtente; //Username dell?utente
myHeader.Password = strPassUtente; //Password utente
//Associo l?header al servizio
wsrvMessaggi.myHeaderValue = myHeader;
//Richiamo il metodo del servizio
return myService.checkHeader();
SicurezzaL?utilizzo dei SOAP Header permette un buon livello di sicurezza, anche se i dati contenuti nei SOAP Header sono in chiaro, quindi per aggiungere un livello maggiore di sicurezza è possibile utilizzare il Secure Sockets Layer su protocollo HTTPS, quindi permettendo solo ai client in possesso di certificati validi l?accesso al servizio.