ASP.NET / Sikkerhed / Brug af forms modellen
Forms modellen
For at bruge forms sikkerhedsmodellen skal vi have etableret 3 elemeter
- En web.config fil, der kan ligge i roden på web-sitet
- En web.config fil, der kan ligge i den mappe, der skal sættes restriktioner på
- En login side, hvor brugeren kan indtaste sit brugernavn og kodeord
Visual Studio .NET
I VS.NET må man etablere hvert af disse elementer i hånden. I roden på web-sitet skal vi have en web.config fil, der beskriver hvordan autentificeringen skal køre - den del af filen kan se sådan her ud (ligger under system.web):
Web.Config 1
<authentication mode="Forms">
<forms name="ASPXAUTH"
path="/"
loginUrl="admin/login/login.aspx"
timeout="999999" />
</authentication>
Og i den/de mapper man vil have begrænsning placerer man en web.config fil, der kan have et indhold som følger:
Web.config 2
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
Login.aspx
Endelig skal der skrives en login fil, der kan styre selve login processen. Den skal naturligvis placeres korrekt i forhold til informationerne i web.config filen. Login.aspx filen skal indeholde to tekstbokse til brugernavn og kodeord og en knap. Login delen i codebehind filen kan se sådan her ud:
VB.NET
Imports System.Web.Security
Sub LoginBtn_Click(Sender As Object, E As EventArgs)
If Page.IsValid Then
If ((UserName.Text = "peter") And (UserPass.Text = "password")) Then
FormsAuthentication.RedirectFromLoginPage(UserName.Text, false)
Else
Msg.Text = "Du har fået tastet forkert brugernavn eller password"
End If
End If
End Sub
C#
Using System.Web.Security;
private void btnLogin_Click(object sender, System.EventArgs e)
{
if (IsValid)
{
if ((UserName.Text == "peter") && (UserPass.Text == "password"))
{
FormsAuthentication.RedirectFromLoginPage(UserName.Text, false);
}
else
{
Msg.Text = "Du har fået tastet forkert brugernavn eller password";
}
}
}
Husk desuden, at du har metoden
FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "SHA1")
der er stilles til rådighed af FormsAuthentication objektet. Den kan bruges til at kryptere passwords så man uden problemer kan skrive dem i sin database eller i et xml dokument.
WebMatrix
I Web matrix får vi fin hjælp til at etablere sikkerhed baseret på forms

Som det fremgår kan vi oprette
- en web.config fil, der skal ligge i den mappe, som sikkerheden skal dække
- en log ind og
- en log ud fil
web.config filen
Man skal tilpasse web.config filen to steder. I roden på web-sitet skal man have en web.config fil, med et indhold omkring autentifikation der ser ca. sådan her ud:
<authentication mode="Forms">
<forms name="ASPXAUTH"
path="/"
loginUrl="/admin/login/login.aspx"
timeout="999999" />
</authentication>
Den fortæller dels hvilken autentifikation man vil bruge og hvor login filen ligger.
I de mapper, der skal have begrænsing skal man også have en web.config fil liggende - den kan se sådan her ud:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
Den afviser alle ikke autentificerede brugere.
Man kan også lave én der ser sådan her ud:
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<system.web>
<authorization>
<deny users="?" />
<deny users="peter, jens" />
</authorization>
</system.web>
</configuration>
Den afviser alle ikke autentificerede brugere OG jens og peter.
Login.aspx
Ud over det skal vi have en login.aspx - den skal have to tekstbokse, hvor brugeren kan skrive sit brugernavn og password og en knap. Koden til knappen kan se sådan her ud:
Sub LoginBtn_Click(Sender As Object, E As EventArgs)
If Page.IsValid Then
If ((UserName.Text = "peter") And (UserPass.Text = "password")) Then
FormsAuthentication.RedirectFromLoginPage(UserName.Text, false)
Else
Msg.Text = "Du har fået tastet forkert brugernavn eller password"
End If
End If
End Sub
Den bør naturligvis tilpasses så den trækker sine informationer fra en database eller et xml dokument. Husk at sætte den sidste parameter til false i FormsAuten... - ellers bliver der lavet en persistent cookie på brugerens maskine, hvilket betyder at han så altid vil kunne komme ind på sitet.
Husk desuden, at du har metoden
FormsAuthentication.HashPasswordForStoringInConfigFile(txtPassword.Text, "SHA1")
der er stilles til rådighed af FormsAuthentication objektet. Den kan bruges til at kryptere passwords så man uden problemer kan skrive dem i sin database eller i et xml dokument.
Rollebaseret sikkerhed
Læs om hvordan man kan implementere rollebaseret sikkerhed her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/f_and_m/html/vxconrolebasedsecurity.asp?frame=true
Dette er også en god reference på det område:
http://www.codeproject.com/aspnet/formsroleauth.asp
Når du har betalt for kurset får du adgang til øvelser til hver lektion.
Og når du har fået godkendt din besvarelse får du desuden adgang til mine løsningsforslag med ekstra tips og trix.