|
|
Brugervalidering i ASP.NETMange sites har behov for at styre hvilke brugere der har adgang til hvad på sitet. Til dette kan man lave sine egne rutiner og håndtering af brugerens tilstand, men man kan også bruge ASP.NET's indbyggede features til dette. ASP.NET's udgave går fra et ultra simpel (og mindre sikkert) setup, til avanceret og (formodentlig) sikkert setup, hvor der benyttes eksterne autorisationsmekanismer så som Passport m.fl. Denne artikel beskæftiger sig med en af de simplere metoder, som kan implementeres uden nogen form for afhængighed til andre resurser end dem man selv kan levere (database eller anden form for informationsbærende enhed). De simple modellerFå statiske brugereI dette setup har man behov for at en lille, forholdsvis statisk mængde brugere skal have adgang til en del af sitet. Til dette formål kan man sætte valideringsoplysningerne op i web.config, således:
<system.web>
<authentication mode="Forms">
<forms loginUrl="/login.aspx" defaultUrl="/">
<credentials passwordFormat="Clear">
<add user="bruger1" password="alonzo863" />
<add user="bruger2" password="breda290" />
</credentials>
</forms>
</authentication>
<authorization>
<allow users="bruger1,bruger2" />
</authorization>
</system.web>
Ovenstående indstillinger bevirker at alle sider fra roden af sitet og nedefter (med mindre rettighederne ændres med authorization-blokken) vil kræve, at man logger ind med bruger1 eller bruger2's oplysninger. Alle andre vil blive præsenteret for loginformularen uanset hvor de surfer hen på sitet (undtaget er dog, hvis der i en undermappe eksisterer en virtuel applikation, som har sit eget autorisationsdomæne). Har man en større variabel mængde brugere, man ønsker at give adgang til en del af sitet, kan man anvende følgende format i authorization-sektionen:
<authorization>
<deny users="?" />
</authorization>
Dette betyder at alle brugere der skal have adgang til andet end login-formularen skal være autoriseret. Spørgsmålstegnet angiver "enhver uautoriseret bruger". Bruges der en asterisk (*) menes der "alle brugere". NB: Authentication-sektionen må kun specificeres i rodens web.config, men authorization-sektionen må specificeres i hver undermappe på sitet og man kan derfor lave mappespecifik brugerstyring på denne måde. Det er naturligvis ikke nok bare at sætte dette op i web.config - login-formularen skal også laves (den loginUrl-atribut man refererer til i forms-elementet i web.config). Dette kunne gøres således:
<form id="form1" runat="server">
Brugernavn:<br/><asp:TextBox ID="txtUsr" runat="server" /><br />
Kodeord:<br/><asp:TextBox ID="txtPass" runat="server" TextMode="Password" /><br />
<asp:Button ID="btnLogin" runat="server" Text="Log på"
onclick="btnLogin_Click" /><br /><br />
<asp:Label ID="lblMsg" runat="server"></asp:Label>
</form>
og den bagvedliggende kode kunne se således ud:
protected void btnLogin_Click(object sender, EventArgs e)
{
if (FormsAuthentication.Authenticate(txtUsr.Text, txtPass.Text))
FormsAuthentication.RedirectFromLoginPage(txtUsr.Text, false);
else
lblMsg.Text = "Loginoplysninger ikke korrekte.";
}
Formularen giver sig selv, så hvis vi fokuserer på koden bemærker vi den simple metode til at udføre valideringen. Der findes i .NET-frameworket et par klasser som hjælper med at validere brugere og FormsAuthentication er en af disse klasser. Der findes nogle statiske metoder som dels kan undersøge om den pågældende bruger er gyldig (jf. de angive brugeroplysninger i web.config's authorization-sektion), dels kan sørge for at gemme oplysningerne om den autoriserede bruger, så .NET kan finde ud af om en bruger har adgang til en given side og man selv kan hente oplysninger om den aktuelle bruger. Et variabelt antal brugereSkulle man ønske at verificere brugeren på grundlag af en database, kan man lave sin egen funktion der undersøger om loginoplysningerne er tilstrækkelige for den pågældende kontekst. Funktionen beslutter om brugeren er gyldig eller ugyldig. FormsAuthentication.RedirectFromLoginPage kaldes i tilfælde af, at brugeren er gyldig i den givne kontekst. Benytter man denne metode, kan man fjerne credentials-sektionen fra sin web.config og gøre brugeroplysningerne lidt mindre åbenlyse. Konteksten kan f.eks. identificeres via den side som login-formularen er kaldt fra. Denne side kan findes ved at tjekke FormsAuthentication.GetRedirectUrl, der returnerer stien til den side som brugeren ønksede at få vist umiddelbart inden login. Der findes en række andre oplysninger på FormsAuthentication-objektet som kan hjælpe med at modificere og aflæse omstændighederne omkring valideringen af en bruger, så tag et nærmere kig på det objekt. Info om autoriserede brugereNår en bruger er autoriseret, findes oplysningerne om den pågældende bruger i objektet User. User-objektet ligger på HttpContext-objektet (og kan dermed finde på Page-objektet på en aspx-side). På User-objektey kan man bla. undersøge, om den aktuelle bruger er autoriseret og hvilket navn denne er autoriseret med. Eksempelvis: Page.User.Identity.Name for at finde ud af hvilket brugernavn den aktuelle bruger har. Dette navn kan så benyttes som nøgle for at finde frem til yderligere oplysninger om den aktuelle bruger, f.eks. i en database eller lignende... User-objektet har også en mulighed for at undersøge om den aktuelle bruger overhovedet er autoriseret. Dette undersøges via User.Identity.IsAuthenticated. Når brugeren er færdigTypisk vil man også gerne tillade at brugeren eksplicit logger af sitet (dels for at give brugeren en sikkerhed for at de rent faktisk er logget af og andre ikke umiddelbart kan få adgang til deres oplysninger, dels for at skifte bruger, hvis dette måtte være nødvendigt). Til dette formål kan man bruge funktionen FormsAuthentication.SignOut. Umiddelbart efter dette kald kan man vælge at redirecte til login-siden eller en standardside, f.eks. forsiden. Eksempelvis:
protected void lbnLogaf_Click(object sender, EventArgs e)
{
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();
}
Her vælger vi at omdirigere til loginsiden. Yderligere læsning4 Guys From Rolla, en længere artikel (på engelsk) om samme emne. |
| Sidst opdateret: 09-11-2009 12:41:01 |
|
Tilmeld link |
Tilføj Link |
Tilføj Link |
@-begynder Erklæring om beskyttelse af personlige oplysninger |