Sicurezza dei Web Service con ASP.NET

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

Ovviamente non possiamo inserire le nostre credenziali tramite una finestra proposta del browser?

Consideriamo il seguente web service che fornisce l'ora del server:

<%@ Webservice class="TimeUtility" %>
Imports System
Imports System.DateTime
Imports System.Web.Services
<WebService(description:="Prova per l'identificazione dell'utente che utilizza i webservices",Namespace:="http://aspitalia.com/webservices/") > _
Public Class TimeUtility
   Inherits Webservice
     WebMethod(Description:="Restituisce l'ora attuale")> _
     Public Function WhatTimeIsIt() as String
     return Now().ToString
   End Function
End Class

Sappiamo che sia scrivendo noi sia utilizzando Microsoft Visual Studio.Net sia utilizzando l'application console wsdl.exe, il proxy creato avrà una classe con nome e metodi identici al web service in modo da essere utilizzato come una normale classe presente sul nostro server.

Quest'ultima eredita la classe SoapHttpClientProtocol che essendo uno strumento per dialogare con il protocollo Soap contiene una proprietà Credentials del tipo NetworkCredential, contenuto nel namespace System.Net. Non dobbiamo far altro che fornire le nostre credenziali tramite Soap come indicato di seguito:

<%@ Page Language="vb" debug="true" %>
<%@ Import namespace="System.Net" %>
<%@ 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 NetworkCredential
   objAuthentication.UserName="Administrator"
   objAuthentication.Password="password"
   objOra.Credentials=objAuthentication
   result.Text="Sono le: " &objOra.WhatTimeIsIt()
Catch err as Exception
   result.Text=Err.Message
End Try
End Sub
</script>

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

Nell'esempio si può notare che nel normale uso del web service è stata creata una nuova istanza di NetworkCredential e che per fornite le credenziali (autenticate tramite l'ACLs di Windows) vengono assegnate alla proprietà Credentials ereditata dal SoapHttpClientProtocol. Ad ogni singola chiamata queste credenziali vengono passate in modo da consentirne l'elaborazione nel caso l'autenticazione vada a buon fine.

Purtroppo questa autenticazione presenta oltre al fatto del problema della compatibilità della autenticazione NTLM un eccessiva elaborazione nel processo stesso e un rischio maggiore per l'invio delle credenziali ad ogni chiamata.

Autenticazione Forms

Un altro metodo di autenticazione e autorizzazione è mediante Forms che fa uso di un cookie per mantenere lo stato di autenticazione.

Il nome autenticazione Forms è un po' improprio perché a differenza delle normali pagine ASP.Net se un utente non è autentificato non sarà possibile reindirizzarlo ad una pagina di login poiché stiamo lavorando con il protocollo Soap e non con un normale browser.

Allora perché usare questa opzione? Semplicemente perchè per l'autenticazione del client vengono utilizzati i cookies.

Innanzitutto bisogna configurare l'applicazione che fornisce il web service per aggiungere il supporto all'autenticazione forms, sempre all'interno del web.config:

<configuration>
   <system.web>
    <authentication mode="Forms">
       <forms name=".ASPXAUTH" loginUrl="login.aspx" protection="All" />
    </authentication>
   </system.web>
</configuration>

E' importante notare che non abbiamo specificato nè delle <credentials> nè una sezione <authorization> perché se un utente non fosse riconosciuto o fosse anonimo, come detto in precedenza, verrebbe (teoricamente) reindirizzato alla pagina login.aspx cosa che non si potrebbe gestire così semplicemente.

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