background image

1

Technologie internetowe

Wykład 12

Kontrola dostępu w ASP.NET

Podstawowe pojęcia

Autentykacja – proces rozpoznania i 
uwierzytelnienia użytkownika 

Autoryzacja – proces sprawdzenia, czy 
rozpoznany użytkownik ma uprawnienia 
do wykonywania określonych operacji, 
dostępu zasobów

background image

2

Implementacja uwierzytelnienia na 
zmiennych sesyjnych

protected void btnLoguj_Click(object sender, EventArgs e)

{

SqlConnection polaczenie =

new SqlConnection(WebConfigurationManager.ConnectionStrings["bazaUzytkownikow"].ConnectionString);

SqlCommand polecenie = 

new SqlCommand("SELECT COUNT(*) FROM Uzytkownicy WHERE Nazwa=@Nazwa AND Haslo=@Haslo", polaczenie);

polecenie.Parameters.Add("@Nazwa", SqlDbType.NVarChar, 20).Value = txtNazwa.Text;
polecenie.Parameters.Add("@Haslo", SqlDbType.NVarChar, 20).Value = txtHaslo.Text;
polaczenie.Open();
int ile = (int)polecenie.ExecuteScalar();
if (ile > 0) 
Session["uzytkownik"] = "Slawek";

Response.Redirect(Server.UrlDecode(Request.QueryString.ToString()));

else lblInfo.Text = "Zła nazwa użytkownika lub hasło";

}

Logowanie.aspx

protected void Page_PreInit(object sender, EventArgs e)

{

if (Session["uzytkownik"] == null)
{

Response.Redirect("Logowanie.aspx?" + Server.UrlEncode(Request.Url.ToString()));
Response.End();

}

}

Strona chroniona

Metody uwierzytelnienia w ASP.NET

Windows

Wykorzystuje mechanizmy uwierzytelnienia MS Windows

Zarządzanie użytkownikami w ramach narzędzi 
administracyjnych Windows

Stosowana dla ograniczonej puli użytkowników

Form

Użytkownicy składowani w dedykowanej bazie danych

Dane uwierzytelniające przekazywane przez formularz HTML

Zarządzanie użytkownikami poprzez strony WWW

Stosowana dla nieograniczonej puli użytkowników

Password

Pula użytkowników wspólna dla wielu serwisów

Dane użytkowników składowane na serwerze MS

background image

3

Uwierzytelnienie Windows

Basic – hasło i login przesyłane w 
nagłówku HTTP

Digest – hasło hashowane

NTLM, Kerberos

Certyfikaty klienta

Uwierzytelnienie Forms

Autentykacja przez wpisanie login i hasła 
w formularzu umiewszonym na stronie

Zalecane wykorzystanie protokołu SSL

Użytkownicy przechowywani w:

Bazie danych

Pliku XML

Innym składowisku danych

background image

4

Konfiguracja uwierzytelnienia Forms

<system.web>

<authentication mode="Forms">

<forms loginUrl="~/Logowanie.aspx" />

</authentication>
<authorization>

<deny users="Jacek,Placek" />
<deny users="?"/>

</authorization>

</system.web>

<system.web>

<authorization>

<allow users="Administrator"/>
<deny users="*"/>

</authorization>

</system.web>

•- wszyscy uwierzytelnieni i anonimowi

użytkownicy

? - użytkownicy anonimowi

Uwaga ! O pierwszeństwie wpisów 
autoryzujących decyduje ich kolejność. 

<connectionStrings>
<add name="

LocalSqlServer

” connectionString="data source=.\SQLEXPRESS;

Integrated Security=SSPI;

AttachDBFilename=|DataDirectory|aspnetdb.mdf;

User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config

<membership><providers><add name="AspNetSqlMembershipProvider" 
type="System.Web.Security.SqlMembershipProvider, 
System.Web, Version=2.0.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a" 

connectionStringName="LocalSqlServer"

enablePasswordRetrieval="false" 

enablePasswordReset="true" requiresQuestionAndAnswer="true" 
applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" 
maxInvalidPasswordAttempts="5" 
minRequiredPasswordLength="7" 
minRequiredNonalphanumericCharacters="1„

passwordAttemptWindow="10" passwordStrengthRegularExpression=""/>

</providers></membership>
</system.web>

ASP.NET Configuration - Użytkownicy

background image

5

Mechanizm providerów

Składnica

danych

Provider

ASP.NET

I

N
T
E
F
R
E

J

S

Zalety:
• swoboda łączenia ASP.NET z dowolnym składowiskiem danych
• możliwość korzystania z wszystkich udogodnień ASP.NET
• stosunkowo proste tworzenie własncych providerów

Struktura bazy dla użytkowników

background image

6

Kontrolka Login

Właściwości:
• TitleText
• UserNameLoginText
• PasswordLabelText
• RememberMeText
• LoginButtonText

<asp:Login ID="Login1" runat="server"></asp:Login>

Zdarzenia:
• Authenticate

Kontrolka CreateUserWizzard

<asp:CreateUserWizard ID="CreateUserWizard1" 

runat="server">

<WizardSteps>

<asp:CreateUserWizardStep runat="server" />
<asp:CompleteWizardStep runat="server" />

</WizardSteps>

</asp:CreateUserWizard>

Zdarzenia:
• CreatingUser
• CreatedUser

background image

7

Kontrolka ChangePassword

<asp:ChangePassword ID="ChangePassword1" runat="server">
</asp:ChangePassword>

Kontrolka PasswordRecovery

<asp:PasswordRecovery ID="PasswordRecovery1" runat="server">

<MailDefinition Subject="Nowe hasło">
</MailDefinition>

</asp:PasswordRecovery>

<system.net>

<mailSettings>

<smtp deliveryMethod="Network" from="admin@polsl.pl">

<network defaultCredentials="true" host="poczta.polsl.pl" port="25" userName="admin" password="adminXYZ"/>

</smtp>

</mailSettings>

</system.net>

web.config

background image

8

Kontrolka LoginStatus

<asp:LoginStatus ID="LoginStatus1" runat="server" />

<asp:LoginView ID="LoginView1" runat="server">

<LoggedInTemplate>

Witaj w &quot;klubie&quot;.

</LoggedInTemplate>
<AnonymousTemplate>

Jesteś anonimowy użytkownkiem.

</AnonymousTemplate>

</asp:LoginView>

Kontrolka LoginView

background image

9

Struktura danych dla użytkowników

Kontrolka LoginName

<asp:LoginName ID="LoginName1" runat="server" />

Adam

background image

10

Klasa Membership

Składnica

danych

Membership

Provider

Klasa

Membership

Metody:
• CreateUser
• DeleteUser
• FindUserByEmail
• FindUserByName
• GetUser
• GetAllUsers
• GetNumberOfUsersOnline
• UpdateUser
• ValidateUser

Klasa Membership - przykład

<%@ Page Language="C#" %>

<script runat="server">

protected void btnSpis_Click(object sender, EventArgs e)
{

foreach (MembershipUser mu in Membership.GetAllUsers())

lstUzytkownicy.Items.Add(mu.UserName);

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">

<title></title>

</head>
<body>

<form id="form1" runat="server">
<div>

<asp:ListBox ID="lstUzytkownicy" runat="server"></asp:ListBox> <br />
<asp:Button ID="btnSpis" runat="server" onclick="btnSpis_Click" Text="Spis" />

</div>

</form>

</body>
</html>

Klasa MembershipUser
Właściwości:
• UserName
• Email
• CreationDate
• IsOnline

background image

11

Role

Role są odpowiednikiem grup 
użytkowników

Autoryzacje można nadawać całym 
rolom 

ASP.NET nie udostępnia kontrolek do 
zarządzania rolami

Konfiguracja ról

<system.web>

<authentication mode="Forms">

<forms loginUrl="~/Logowanie.aspx" />

</authentication>
<authorization>

<deny users="?"/>

</authorization>

</system.web>

<system.web>

<authorization>

<allow roles="Administratorzy"/>
<deny users="*"/>

</authorization>

</system.web>

<connectionStrings>
<add 

name="LocalSqlServer”

connectionString="data source=.\SQLEXPRESS;

Integrated Security=SSPI;

AttachDBFilename=|DataDirectory|aspnetdb.mdf;

User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config

<roleManager>
<providers>
<add name="AspNetSqlRoleProvider" 

connectionStringName="LocalSqlServer"

applicationName="/" 

type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
<add name="AspNetWindowsTokenRoleProvider" applicationName="/" 
type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>

background image

12

ASP.NET Configuration - Role

Struktura danych dla ról

background image

13

Klasa Roles

Składnica

danych

Role

Provider

Klasa
Roles

Metody:
• CreateRole
• DeleteRole
• AddUserToRole
• RemoveUserToRole
• GetRolesForUser
• GetUsersInRole
•IsUserInRole

Klasa Roles - przykład

<%@ Page Language="C#" %>

<script runat="server">

protected void btnDodaj_Click(object sender, EventArgs e)
{

if (Membership.GetUser(txtUzytkownik.Text)!=null && !Roles.IsUserInRole(txtUzytkownik.Text,"Administratorzy"))
Roles.AddUserToRole(txtUzytkownik.Text, "Administratorzy");

}

protected void btnUsun_Click(object sender, EventArgs e)
{

if (Membership.GetUser(txtUzytkownik.Text) != null && Roles.IsUserInRole(txtUzytkownik.Text))

Roles.RemoveUserFromRole(txtUzytkownik.Text, "Administratorzy");

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">

<title></title>

</head>
<body>

<form id="form1" runat="server">
<div>

<asp:TextBox ID="txtUzytkownik" runat="server"></asp:TextBox>
<asp:Button ID="btnDodaj" runat="server" onclick="btnDodaj_Click"      Text="Dodaj" />

&nbsp;<asp:Button ID="btnUsun" runat="server" Text="Usuń" onclick="btnUsun_Click" />

</div>
</form>

</body>
</html>

background image

14

Zmienne profilu użytkownika

Każdy rozpoznany użytkownik może posiadać 
swój zestaw zmiennych profilu

Nazwy i typy tych zmiennych należy 
zdefiniować w pliku web.config

Zmienne profilowe są dostępne z klasy Profile

Zmienne są przechowywane w bazie danych

Użytkownicy anonimowi mogą mieć 
przypisane chwilowe wartości zmiennych 
profilowych

Zmienne profilu użytkownika

<system.web>

<profile>

<properties>

<group name="daneOsobowe">

<add name="imie" type="System.String" allowAnonymous="false"/>
<add name="nazwisko" type="System.String" allowAnonymous="false"/>

</group>
<add name="kolor" type="System.Drawing.Color" allowAnonymous="true"/>

</properties>

</profile>

</system.web>

web.config

Profile.daneOsobowe.imie = txtImie.Text;
Profile.daneOsobowe.nazwisko = txtNazwisko.Text;
lblWynik.BackColor = Profile.kolor;

background image

15

Struktura danych dla zmiennych profilowych