Tutorial sulla sicurezza del servizio Web (WS) con esempio SOAP

Sommario:

Anonim

Cos'è WS Security?

WS Security è uno standard che affronta la sicurezza quando i dati vengono scambiati come parte di un servizio Web. Questa è una caratteristica chiave di SOAP che lo rende molto popolare per la creazione di servizi Web.

La sicurezza è una caratteristica importante in qualsiasi applicazione web. Poiché quasi tutte le applicazioni Web sono esposte a Internet, esiste sempre la possibilità di una minaccia alla sicurezza per le applicazioni Web. Pertanto, quando si sviluppano applicazioni basate sul Web, è sempre consigliabile assicurarsi che l'applicazione sia progettata e sviluppata tenendo conto della sicurezza.

In questo tutorial imparerai-

  • Minacce alla sicurezza e contromisure
  • Standard di sicurezza del servizio Web
  • Come creare servizi web sicuri
  • Best practice per la sicurezza dei servizi Web

Minacce alla sicurezza e contromisure

Per comprendere le minacce alla sicurezza che possono essere ostili a un'applicazione web, diamo un'occhiata a un semplice scenario di un'applicazione web e vediamo come funziona in termini di sicurezza.

Una delle misure di sicurezza disponibili per HTTP è il protocollo HTTPS. HTTPS è il modo sicuro di comunicazione tra il client e il server sul web. HTTPS utilizza il livello Secure Sockets o SSL per la comunicazione sicura. Sia il client che il server avranno un certificato digitale per identificarsi come autentici quando avviene una comunicazione tra il client e il server.

In una comunicazione HTTPS standard tra il client e il server, vengono eseguiti i seguenti passaggi

  1. Il client invia una richiesta al server tramite il certificato client. Quando il server vede il certificato del client, prende una nota nel suo sistema di cache in modo che sappia che la risposta dovrebbe tornare solo a questo client.
  2. Il server quindi si autentica al client inviando il suo certificato. Ciò garantisce che il client comunichi con il server corretto.
  3. Tutte le comunicazioni successive tra il client e il server vengono crittografate. Ciò garantisce che se altri utenti tentassero di violare la sicurezza e ottenere i dati richiesti, non sarebbero in grado di leggerli perché verrebbero crittografati.

Ma il tipo di protezione di cui sopra non funzionerà in tutte le situazioni. Può arrivare un momento in cui il client può parlare con più server. Un esempio riportato di seguito mostra un client che parla contemporaneamente sia a un database che a un server web. In questi casi, non tutte le informazioni possono passare attraverso il protocollo https.

È qui che SOAP entra in azione per superare tali ostacoli grazie alla specifica WS Security. Con questa specifica, tutti i dati relativi alla sicurezza sono definiti nell'elemento di intestazione SOAP.

L'elemento di intestazione può contenere le informazioni indicate di seguito

  1. Se il messaggio all'interno del corpo SOAP è stato firmato con una chiave di sicurezza, quella chiave può essere definita nell'elemento di intestazione.
  2. Se qualsiasi elemento all'interno del SOAP Body è crittografato, l'intestazione conterrà le chiavi di crittografia necessarie in modo che il messaggio possa essere decrittografato quando raggiunge la destinazione.

In un ambiente con più server, la tecnica di autenticazione SOAP sopra descritta aiuta nel modo seguente.

  • Poiché il corpo SOAP è crittografato, potrà essere decrittografato solo dal server Web che ospita il servizio Web. Ciò è dovuto al modo in cui è progettato il protocollo SOAP.
  • Supponiamo che se il messaggio viene passato al server del database in una richiesta HTTP, non può essere decrittografato perché il database non dispone dei meccanismi appropriati per farlo.
  • Solo quando la richiesta raggiunge effettivamente il server Web come protocollo SOAP, sarà in grado di decifrare il messaggio e inviare la risposta appropriata al client.

Vedremo negli argomenti successivi come utilizzare lo standard WS Security per SOAP.

Standard di sicurezza del servizio Web

Come discusso nella sezione precedente, lo standard WS-Security ruota attorno all'inclusione della definizione di sicurezza nell'intestazione SOAP.

Le credenziali nell'intestazione SOAP vengono gestite in 2 modi.

Innanzitutto, definisce un elemento speciale chiamato UsernameToken. Viene utilizzato per passare il nome utente e la password al servizio web.

L'altro modo è utilizzare un token binario tramite BinarySecurityToken. Viene utilizzato in situazioni in cui vengono utilizzate tecniche di crittografia come Kerberos o X.509.

Il diagramma seguente mostra il flusso di come funziona il modello di sicurezza in WS Security

Di seguito sono riportati i passaggi che si svolgono nel flusso di lavoro di cui sopra

  1. È possibile inviare una richiesta dal client del servizio Web al servizio token di sicurezza. Questo servizio può essere un servizio Web intermedio creato appositamente per fornire nomi utente / password o certificati al servizio Web SOAP effettivo.
  2. Il token di sicurezza viene quindi passato al client del servizio Web.
  3. Il client del servizio Web ha quindi chiamato il servizio Web, ma, questa volta, assicurandosi che il token di sicurezza sia incorporato nel messaggio SOAP.
  4. Il servizio Web comprende quindi il messaggio SOAP con il token di autenticazione e può quindi contattare il servizio token di sicurezza per verificare se il token di sicurezza è autentico o meno.

Il frammento di seguito mostra il formato della parte di autenticazione che fa parte del documento WSDL. Ora in base allo snippet di seguito, il messaggio SOAP conterrà 2 elementi aggiuntivi, uno è il nome utente e l'altro è la password.

Quando il messaggio SOAP viene effettivamente passato tra i client e il server, la parte del messaggio che contiene le credenziali dell'utente potrebbe essere simile a quella mostrata sopra. Il nome dell'elemento wsse è un elemento speciale denominato definito per SOAP e significa che contiene informazioni basate sulla sicurezza.

Come creare servizi web sicuri

Ora diamo un'occhiata all'esempio di sicurezza del servizio web SOAP. Costruiremo una sicurezza del servizio web sull'esempio dimostrato in precedenza nel capitolo SOAP e aggiungeremo un livello di sicurezza ad essa.

Nel nostro esempio, creeremo un semplice servizio web, che verrà utilizzato per restituire una stringa all'applicazione che chiama il servizio web. Ma questa volta, quando viene richiamato il servizio Web, è necessario fornire le credenziali al servizio chiamante. Seguiamo i passaggi seguenti per creare il nostro servizio web SOAP e aggiungervi la definizione di sicurezza.

Passaggio 1) Il primo passaggio consiste nel creare un'applicazione Web Asp.Net vuota. Da Visual Studio 2013, fare clic sull'opzione di menu File-> Nuovo progetto.

Dopo aver fatto clic sull'opzione Nuovo progetto, Visual Studio ti fornirà un'altra finestra di dialogo per la scelta del tipo di progetto e per fornire i dettagli necessari del progetto. Questo viene spiegato nel passaggio successivo

Passaggio 2) In questo passaggio,

  1. Assicurati di aver prima scelto il modello Web C # per l'applicazione Web ASP.NET. Il progetto deve essere di questo tipo per creare un progetto di servizi web. Scegliendo questa opzione, Visual Studio eseguirà i passaggi necessari per aggiungere i file richiesti che sono richiesti da qualsiasi applicazione basata sul Web.
  2. Assegna un nome al tuo progetto che nel nostro caso è stato dato come " webservice.asmx " . Quindi assicurati di fornire una posizione in cui verranno archiviati i file del progetto.

Una volta terminato, vedrai il file di progetto creato in Esplora soluzioni in Visual Studio 2013.

Passaggio 3) In questo passaggio,

Aggiungeremo un file di servizio Web al nostro progetto

  1. Primo clic con il pulsante destro del mouse sul file di progetto come mostrato di seguito
  1. Dopo aver fatto clic con il pulsante destro del mouse sul file di progetto, è possibile scegliere l'opzione "Aggiungi-> Servizio Web (ASMX) per aggiungere un file di servizio Web. È sufficiente fornire un nome di Servizio Tutorial per il file di nome del servizio Web.

Il passaggio precedente richiederà una finestra di dialogo, in cui è possibile inserire il nome del file del servizio web. Quindi nella finestra di dialogo sottostante, inserisci il nome di TutorialService come nome del file.

Passaggio 4) Aggiungere il codice seguente al file asmx del servizio Tutorial. Il frammento di codice riportato di seguito viene utilizzato per aggiungere una classe personalizzata che verrà utilizzata per modificare l'intestazione SOAP quando viene generato il messaggio SOAP. Poiché ora vogliamo aggiungere le credenziali di sicurezza all'intestazione SOAP, questo passaggio è obbligatorio.

return "This is a Guru99 Web Service";}public class AuthHeader : SoapHeader{public string UserName;public string Password;}}

Spiegazione del codice: -

  1. Stiamo ora creando una classe separata chiamata AuthHeader che è di tipo SoapHeader class . Ogni volta che si desidera modificare ciò che viene passato nell'intestazione SOAP, è necessario creare una classe che utilizzi la classe SoapHeader incorporata di .Net. Personalizzando l'intestazione SOAP, ora abbiamo la possibilità di passare un "nome utente" e una "password" quando viene chiamato il servizio web.
  2. Definiamo quindi le variabili di "UserName" e "Password" che sono di tipo stringa. Verranno utilizzati per contenere i valori del nome utente e della password che vengono passati al servizio web.

Passaggio 5) Come passaggio successivo, è necessario aggiungere il codice seguente allo stesso file TutorialService.asmx . Questo codice definisce effettivamente la funzione del nostro servizio web. Questa funzione restituisce una stringa "Questo è un servizio Web Guru99" al client. Ma questa volta, la stringa verrà restituita solo se l'applicazione client passa le credenziali al servizio Web.

public class TutorialService : System.Web.Services.WebService{public AuthHeader Credentials;[SoapHeader("Credentials")][WebMethod]public string Guru99WebService(){if (Credentials.UserName.ToLower() != "Guru99" ||Credentials.Password.ToLower() != "Guru99Password"){throw new SoapException("Unauthorized",SoapException.ClientFaultCode);}eisereturn "This is a Guru99 Web service";}

Spiegazione del codice: -

  1. Qui stiamo creando un oggetto della classe AuthHeader che è stata creata nel passaggio precedente. Questo oggetto verrà passato al nostro Guru99Webservice nel quale sarà possibile esaminare da vicino username e password.
  2. L'attributo [SoapHeader] viene ora utilizzato per specificare che quando viene chiamato il servizio Web, è necessario che siano passati il ​​nome utente e la password.
  3. In questo blocco di codice, stiamo effettivamente esaminando il nome utente e la password passati quando viene chiamato il servizio web. Se il nome utente è uguale a "Guru99" e la password è uguale a "Guru99Password", il messaggio "Questo è un servizio Web Guru99" viene passato al client. Altrimenti verrà inviato un errore al client se vengono passati l'ID utente e la password errati.

Se il codice viene eseguito correttamente, verrà visualizzato il seguente output quando si esegue il codice nel browser.

Produzione:

L'output sopra viene mostrato quando il programma viene eseguito, il che significa che il servizio Web è ora disponibile. Facciamo clic sul collegamento Descrizione del servizio.

Dalla descrizione del servizio, sarai ora in grado di vedere che il nome utente e la password sono elementi del file WSDL. Questi parametri devono essere inviati quando viene richiamato il servizio Web.

Best practice per la sicurezza dei servizi Web

Di seguito sono riportate le considerazioni sulla sicurezza che dovrebbero essere prese in considerazione quando si lavora con i servizi Web

  1. Controllo e gestione dei registri : utilizzare il registro delle applicazioni per registrare tutte le richieste che arrivano ai servizi Web. Questo fornisce un rapporto dettagliato su chi ha invocato il servizio web e può aiutare nell'analisi dell'impatto se si verifica una violazione della sicurezza.

  2. Flusso delle chiamate al servizio web : prova a prendere nota del flusso delle chiamate nei servizi web. Per impostazione predefinita, un'applicazione può chiamare più richieste di servizi Web con token di autenticazione passati tra questi servizi Web. Tutte le chiamate tra i servizi Web devono essere monitorate e registrate.

  3. Informazioni sensibili : non includere informazioni sensibili nelle voci di registro come password o numeri di carte di credito o qualsiasi altro tipo di informazione riservata. Se è presente un evento che contiene una di queste informazioni, è necessario eliminarlo prima della registrazione.

  4. Tieni traccia delle operazioni aziendali: tieni traccia delle operazioni aziendali significative. Ad esempio, strumentare la propria applicazione per registrare l'accesso a metodi e logica aziendale particolarmente sensibili. Facciamo un esempio di un'applicazione per lo shopping online. Ci sono più passaggi in un'applicazione tipica come la scelta degli articoli da acquistare, gli articoli caricati nel carrello e quindi l'acquisto finale. L'intero flusso di lavoro aziendale deve essere monitorato dal servizio web.

  5. Autenticazione corretta : l'autenticazione è il meccanismo mediante il quale i client possono stabilire la propria identità con il servizio Web utilizzando un determinato set di credenziali in grado di dimostrare tale identità. Non si dovrebbero mai memorizzare le credenziali dell'utente e quindi, se WS Security viene utilizzato per chiamare il servizio Web, è necessario notare che il servizio Web non deve memorizzare le credenziali inviate nell'intestazione SOAP. Questi dovrebbero essere eliminati dal servizio web.

Sommario

  • SOAP fornisce un livello aggiuntivo chiamato WS Security per fornire ulteriore sicurezza quando vengono effettuate chiamate ai servizi Web.
  • WS Security può essere chiamato con un semplice nome utente o password oppure può essere utilizzato con certificati binari per l'autenticazione
  • Abbiamo visto che in .Net possiamo personalizzare il servizio Web per avere un nome utente e una password passati come parte dell'elemento di intestazione SOAP.