Prima di iniziare ad analizzare la parte riguardante le Permissions, vorrei un
attimo visualizzare il tag Pages, che normalmente viene implementato a runtime
nel codice della pagina. É chiaro che se devo modificare la modalità
di Trace per tutta la mia applicazione andró a farlo nel web.config e non in
ogni singola pagina, altrimenti la mia applicazione diventa tutto tranne che riutilizzabile.
<pages
autoEventWireUp="true|false" 'connette da solo il gestore eventi
buffer="true|false" 'il vecchio response buffer
enableSessionState="true|false|readOnly"
enableViewState="true|false" 'stato dei controlli
pageBaseType="typename,assenbly" 'classe da cui si eredita
smartNavigation="true|false" '
userControlBaseType="typename" 'classe per userControl
Questo elemento è il più interessante. Una volta per poter gestire gli errori
customizzabili bisognava poter accedere alla gestione di IIS e configurare
le pagine in base all' errore etc etc ... ... Adesso tramite il web.config
possiamo decidere a priori, anche in base alla tipologia di errore, cosa fare,
che redirect usare e cosi' via. Volendo sarebbe anche possibile implementare
una classe che gestisca ogni singolo errore in un' unica pagina, ma non è certo
lo scopo dell' articolo.
<customErrors
defaultRedirect="" 'pagina di errore
mode="on|off|RemoteOnly"
<error
redirect="" 'pagina errore custom
statusCode="" 'dice errore esempio : 404
E si, per chi, come me, viene dal buon vecchio Asp farà le capriole con questa
nuova gestione customizzata degli errori.
Ok se fino adesso l' argomento è stato pesante, beh allora chiudete qui la
cosa e cambiate articolo perchè adesso arriva la parte più tosta. Io seguo
l' ordine MSDN e quindi adesso tocca al tag authentication.
Da qui possiamo gestire tutta la logica dell' autenticazione, anche se crearne
una custom non è cattiva idea ... Prima cosa decidiamo quale usare :
<authentication mode="Windows|Forms|Passport|None"
Se decidiamo la prima strada Windows abbiamo finito, chiaramente
useremo gli utenti del Network (A.D.) e imposteremo i permessi ai gruppi ...
Ma se scegliessimo di usare il metodo Passport?
<passport redirectUrl="" />
Ultimo, se invece decidiamo di usare un login custom, dato da delle credenziali
che magari impostiamo noi nel database o in un file xml ...
<forms
loginUrl="url" 'dove risiede la form
name="name" 'nome dcookie di auth.
path="/" 'percorso per il cookie
protection="All|Encription|Validation|None" 'protezione dei cookie
timeout="minuti" 'default 30" durata del login
Parte importante di questo tag sono altri due, il tag credentials e
il tag user. Tramite questi tag possiamo impostare le credenziali
degli utenti via xml. Microsoft fa notare peró che se il sistema
dovessere essere compromesso da attacchi esterni le credenziali sarebbero facilmente
raggiungibili. Quindi tecnica sconsigliata!! Strano peró che
la cosa venga sponsorizzata anche nei test ...
<credentials passwordFormat="Clear|MD5|SHA1"
<user name="Pippo" password="*****"
Ok, se la cosa fosse finita qui, vi verrebbe da pensare come diavolo fare
a impersonificare e come poter gestire autorizzazioni varie, anche
a livello di gruppo. Beh per fare ció abbiamo altri due bellissimi tag che
ci aiutano a smaltire il lavoro. Vediamo adesso identity che
ci aiuta proprio nella rappresentazione di un utente con particolari
permessi
Nota : vi ricordo che per default NET usa o IUSR_MACHINENAME o IWAM_MACHINENAME in
base al tipo di processo, in o out-of.
<identity
impersonate="true|false" 'se usarla o no
userName="user" 'qualsiasi account utente
password="pwd" 'la sua password
Non smetteró mai di ripetere, prudenza prudenza prudenza ...
Bene, abbiamo visto come gestire gli accessi, come impersonare un utente
presente nella macchina, magari per effettuare operazioni particolari sul FileSystem,
ma cosa manca? Mancano i permessi che sono rappresentati dal
tag authorization.
<authorization>
<allow
users="userslist"
roles="rolesList"
verbs="verbsList"
<deny ...
Allora con i tag allow e/o deny impostiamo le autorizzazioni di accesso
o negazione.
Users consente questi valori (elenco utenti seguiti da virgola,
* per tutti, ? per sconosciuti)
Roles consente questi valori (elenco utenti seguiti da virgola,
* per tutti, ? per sconosciuti)
Verbs sono i seguenti (GET, POST, DEBUG e HEAD).
Nota : Io ho costruito una classe che tramite un datatable crea una stringa
dei gruppi onguno seguito da una virgola, cosi' ho ottenuto una gestione personalizzata
(Form) ma con la possibilità di lavorare con i gruppi (finti). Adesso riesco
ad accedere a isMemberOf e a ltri metodi utili dell' oggetto permissions.