Membership .NET
La nuove funzioni di membership sono state sicuramente una delle cose più gradite della vesione 2.0 di ASP.NET.
Al di là dei nuovi controlli per la gestione completa del logon e della creazione dell'utente ci sono però molte
altre novità non sempre note.
Il tipo di autenticazione
Oltre all'accesso anonimo, ASP.NET supporta 3 tipi di autenticazione: Windows, Forms e Passport. Vediamo
quello che c'è da sapere per quella Windows.
Per forzare IIS alla richiesta di password è innazitutto necessario disattivare l'accesso anonimo disabilitando
l'utente al quale è legato il processo ASP.NET (generalmente il nome è del tipo IUSR_nomemacchina). A questo punto
non rimane che mettere mano al web.config file.
<configuration>
<system.web>
<authentication mode="Windows">
<authorization>
<deny users="?" />
</authorization>
</authentication>
</system.web>
</configuration>
Una cosa importante da ricordare sono i due verbi a disposizione per le autorizzazioni.
- deny (esempio <deny users="?" />
- allow (esempio <allow users="?" />
Poi ci sono le categorie che si possono autorizzare.
- users (per gli utenti)
- roles (per i gruppi)
Ed infine i caratteri jolly.
- * per tutti gli utenti
- ? per tutti gli utenti anonimi
Come avviene l'autenticazione
Una volta che l'utente viene autenticato l'informazione deve essere ricordata fino al logoff. ASP.NET memorizza
questa informazione o in un cookie oppure nella Url a seconda delle impostazioni che forniamo nella sezione forms.
Le possibilità sono:
- UseDeviceProfile: si controlla se il browser utilizzato supporta i cookie (il che non vuol dire che
siano però abilitati). Questa è l'impostazione di default.
- AutoDetect: si controlla se il browser ha i cookie funzionanti inviandone uno di prova.
- UseCookie: si invia sempre un cookie
- UseUri: si utilizza sempre la URL
Ecco un esempio su come impostare questi valori
<configuration>
<system.web>
<authentication mode="Forms">
<forms Cookieless="UseUri" >
</authentication>
</system.web>
</configuration>
Una caratteristica poco nota è quella di memorizzare, magari solo nella fase di sviluppo, le credenziali
all'interno del web.config file.
<system.web>
<authentication>
<forms protection="Encryption" timeout="30">
<credentials passwordFormat="SHA1">
<user name="massimo" password="6D617373696D6F"/>
<user name="betty" password="6265747479" />
</credentials>
</forms >
</authentication>
</system.web>
Per la creazione delle password ecco una semplice utility costruita appositamente
Password:
Encoded password:
Ovviamente questa funziona non può essere utilizzata per il vostro web. Quindi ecco tutto il sorgente da copiare.
Protected Sub encodePswButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles encodePswButton.Click
Dim typedpsw As String = Me.pswTextBox.Text
Dim out As New StringBuilder
Dim myhash As SHA1CryptoServiceProvider = New SHA1CryptoServiceProvider
Dim psw As Byte() = Encoding.ASCII.GetBytes(typedpsw)
myhash.ComputeHash(psw)
For Each b As Byte In psw
out.Append(b.ToString("X2"))
Next
Me.pswencodedTextBox.Text = out.ToString
End Sub
Impersonation
Le applicazioni ASP.NET di default utilizzano l'account asp.net (IIS 5) o il Network service account (IIS 6). Questo
comportamento è configurabile tramite web.config ed il default è:
<processModel autoConfig="true">
Se si utilizza la Windows authentication si può far girare la richiesta con l'account dell'utente
<identity impersonate="true" />
Si può anche impostare per tutte le richieste un account differente
<identity impersonate="true" userName="DOMAIN/user" password="Password" />