Sicurezza dei Web Service con ASP.NET

5 pagine in totale: <<Indietro 1 2 3 4 [5]

Con una funzione infine verificheremo le credenziali e autorizzeremo o meno l'utente.

Il risultato finale è il seguente:

<%@ Webservice class="TimeUtility" %>

Imports System
Imports System.DateTime
Imports System.Xml
Imports System.Web.Services
Imports System.Web.Services.Protocols

Public Class Authentication
   Inherits SoapHeader

   Public User as String
   Public Password as String
End Class

<WebService(description:="Prova per l'identificazione dell'utente che utilizza i webservices",Namespace:="http://civi.no-ip.com/webservices/soapheader")> _
Public Class TimeUtility
   Inherits Webservice

   Public objAuthentication as Authentication

   Private Function isAuthenticate()
    if objAuthentication.User="Administrator" AndAlso _
      objAuthentication.Password="12345" Then
       return True
    Else
       Throw New SoapException("Access danied", New XmlQualifiedName("SoapHeader"))
       return False
    End If
   End Function

   <WebMethod(Description:="Restituisce l'ora attuale"), _
     SoapHeader("objAuthentication", Required:=true)> _
   Public Function WhatTimeIsIt() as String
    if not isAuthenticate Then Exit Function

    return Now().ToString
   End Function
End Class

Passiamo quindi al client. Questa volta sarà necessario rigenerare il proxy.

Analizzandone il codice si noterà che è stata creata una nuova classe di nome Authentication oltre alla solita TimeUtility, esattamente la stessa che avevamo creato per definire le variabili da passare nell'header Soap.

Inoltre all'interno della nostra classe proxy ci sarà una variabile per rappresentare l'istanza della classe Authentication:

Public AuthenticationValue As Authentication

Generalmente, tools come wsdl o Visual Studio.Net chiamano la variabile con lo stesso nome della classe aggiungendo il suffisso "Value". Quindi non dovremo far altro che creare una nuova istanza della classe Authentication, specificare il nome utente e la password e assegnare la nuova istanza alla variabile AuthenticationValue del nostro proxy:

<%@ Page Language="vb" debug="true" %>
<%@ Import namespace="System.Web.Services.Protocols" %>
<%@ Assembly src="ora.vb" %>

<script runat="server">
Private Sub Page_Load(sender as Object, e as EventArgs)
Try
   Dim objOra as New TimeUtility
   Dim objAuthentication as New Authentication

   objAuthentication.User="Administrator"
   objAuthentication.Password="12345"

   objOra.authenticationValue=objAuthentication
   result.Text="Sono le: " &objOra.WhatTimeIsIt()

Catch err as SoapException
   result.Text=Err.Message
End Try

End Sub

</script>

<asp:Label id="result" runat="server" />

Ecco il risultato:

Immagine

E' importante ricordare che se possibile, è opportuno proteggere i dati utilizzando la crittografia, utilizzando Secure Sockets Layer su protocollo HTTPS, non solo per l'invio delle credenziali, ma anche per la trasmissione delle risposte dei web services, che possono contenere a volte dati sensibili o di notevole importanza.

Come fornitore, per utilizzare SSL occorre abilitarne l'uso nella nostra applicazione tramite IIS e validare il certificato tramite la funzione Request.ClientCertificate.IsValid.

Come client invece bisogna aver a disposizione un certificato valido che dovremo caricare tramite la classe System.Secuirity.Cryptography e assegnarlo alla proprietà ClientCertificates del nostro proxy. Si tratta di un argomento avanzato e che varia a seconda della crittografia utilizzata, che esula dallo scopo di questo articolo.

Conclusioni

Sono stati presentati diversi modi per autenticare i nostri web services. Non ce n'è uno migliore di un altro, perciò la scelta spetta in base al web services che usiamo e alla piattaforma su cui gira.

L'autenticazione Windows infatti non funzionerebbe, almeno per quando riguarda l'autenticazione NTLM, su webserver non IIS.
Quella che utilizza il Soap headers diventa una soluzione invece più standard utile anche nel caso in cui volessimo inviare dei dati in più oltre all'user e la password, cosa che le altre due forme di autenticazione non permettono.

L'autenticazione tramite forms invece non essendo una soluzione di uso comune ha il vantaggio di inviare le credenziali la prima volta e di usufruire dei cookies per le successive autenticazioni.

Non resta che provare e applicare queste basi per proteggere gli investimenti delle aziende.

Approfondimenti

5 pagine in totale: <<Indietro 1 2 3 4 [5]

Attenzione: Questo articolo contiene un allegato

Contenuti dell'articolo

Commenti
Dai un voto a questo articolo, ci aiuterà a migliorare il nostro sito (1 è il voto minimo, 5 il massimo).

Per procedere al rating dell'articolo devi essere autenticato.

Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.


TUTORIALS
TOP TEN ARTICOLI
NOTIFICHE

Iscriviti alla nostra newsletter nuoviarticoli per ricevere e-mail le notifiche!

Indirizzo e-mail:
PROVIDER ASP.NET 2.0

Seleziona il database per avere il web.config pronto per Membership, Roles e Profile API.



IN EVIDENZA
MISC