Sicurezza dei Web Service con ASP.NET

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

E' comunque possibile ovviare a questo problema creando un nostro piccolo sistema di autenticazione da aggiungere al nostro web service di base:

<%@ Webservice class="TimeUtility" %>
Imports System
Imports System.DateTime
Imports System.Xml
Imports System.Web.Services
Imports System.Web.Security
Imports System.Web.Services.Protocols

<WebService(description:="Prova per l'identificazione dell'utente che utilizza i webservices",Namespace:="http://aspitalia.com/webservices/")> _
Public Class TimeUtility
   Inherits Webservice
    <WebMethod(Description:="Autentifica l'utente")> _
    Public Function Authenticate(User as String, Password as String) as Boolean
        If (User="Administrator" AndAlso Password="password") Then
         'creo il cookie che dovrà essere inviato insieme alla risposta
         FormsAuthentication.SetAuthCookie(user, true)
         'restituisco true per l'avvenuta autenticazione
         return True
        Else
         autenticazione non avvenuta
         return False
        End If
   End Function

   Private Function isAuthenticate()
        if User.Identity.isAuthenticated Then
         return True
        Else
         Throw New SoapException("Accesso non consentito", _
         New XmlQualifiedName("SoapHeader"))
         return False
        End If
   End Function

   <WebMethod(Description:="Restituisce l'ora attuale")> _
   Public Function WhatTimeIsIt() as String
     'controllo se è autorizzato ad usufruire della funzione
     If not isAuthenticate Then Exit Function
     return Now().ToString
   End Function

End Class

Come potete notare abbiamo aggiunto una funzione pubblica Autenticate che riceve il nome utente e la password. Confrontiamo le credenziali e con il metodo SetAuthCookie del namespace System.web.security creiamo il cookie che dovrà essere inviato al client.

Questo metodo è simile a RedirectFromLoginPage ma si differenzia sul fatto che non ci reindirizza al pagina dalla quale provenivamo prima di fare il login.

Il valore true indica la persistenza del cookie. Nell'esempio abbiamo usato per l'autenticazione un semplice If con user e password immesse direttamente nello script, ma è chiaro si può anche utilizzare un database.

Ora però siamo noi che dobbiamo verificare se l'utente è stato autenticato o meno perciò al richiamo della funzione WhatTimeIsIt eseguiamo una funzione personale, impostata come private. La funzione isAuthenticate infatti controlla lo stato di autenticazione: se è false genera un SoapException, un errore di Soap.

Non è obbligatorio generare un errore Soap, basterebbe anche restituire una semplice stringa al posto dell'ora contente per esempio "Accesso negato" ma in questo modo si dà un tocco di professionalità e soprattutto si segue lo standard.

Andando a vedere il nostro webservices con la pagina autogenerata dal framework vedremo due funzioni:

Immagine

Ora vediamo come implementare il client. Il proxy rimane identico a quello creato in precedenza.

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

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