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 ClassCome 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:

Ora vediamo come implementare il client. Il proxy rimane identico a quello creato in precedenza.
Attenzione: Questo articolo contiene un allegato
Contenuti dell'articolo
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.







Difficoltà

Stampa
Download



