Praktycznie każda większa witryna internetowa, zawiera
obecnie informacje dostępne wyłącznie dla pewnej specyficznej grupy
użytkowników. Mogą być to na przykład płatne artykuły, informacje przeznaczona
wyłącznie dla pracowników lub klientów firmy. Pracując w Internecie dostęp do
tego typu zasobów najczęściej uzyskuje się po podaniu loginu i hasła.
Bezpieczeństwo naszych prywatnych danych pozwalają zachować dwa główne procesy.
Pierwszym z nich jest identyfikacja użytkownika, polegająca na sprawdzeniu
tożsamości użytkownika aplikacji. Kolejnym krokiem jest autoryzacja, w którym
na podstawie podanych danych użytkownik uzyskuje dostęp do zasobów.
Technologia ASP.NET daje twórcą stron internetowych
możliwość sprawdzania tożsamości użytkownika na kilka sposobów. Generalnie,
wyróżniamy trzy podstawowe sposoby identyfikacji.
Windows authentication – identyfikuje i nadaje prawa
dostępu użytkownikom, na podstawie danych zawartych w systemie operacyjnym
serwera. Najczęściej sprowadza się to do tego, że konta użytkowników na
serwerze, umożliwiają równocześnie uzyskanie prawa dostępu do ukrytych zasobów
naszej witryny internetowej.
Forms authentication – w tym przypadku, użytkownik
musi skorzystać ze specjalnej strony, na której podaje login i hasło.
Informacje użytkownikach nie są przechowywane bezpośrednio w systemie.
Identyfikacja i autoryzacja odbywa się na podstawie informacji przechowywanych
w bazie danych, specjalnych plikach lub innych źródłach zewnętrznych.
Paszport authentication – w momencie próby uzyskania
dostępu do określonych zasobów, użytkownik zostaje przekierowany na specjalną
stronę firmy Microsoft, gdzie musi również podać login i hasło. Dane
użytkowników przechowywane są przez wspomnianą firmę. Zaletą tego rozwiązania
jest możliwość posiadania jednakowych loginów i haseł dla wielu witryn. Jednak
z przyczyn niewielkiego zainteresowania tą usługą, sposób ten nie będzie
omawiany w dalszej części artykułu.
Spróbujmy w tym momencie uniemożliwić anonimowym
użytkownikom dostęp do przykładowej strony, wchodzącej w skład projektu. Jako
pierwszą zastosujemy identyfikację Windows. W tym celu do projektu w Visual
Studio dodajemy pili Web.config. Następnie odnajdujemy linię zawierającą następujący
tekst.
<authentication mode=”Windows” />
Widzimy, że tryb ten jest domyślnym trybem identyfikacji
naszej aplikacji. Próba wyświetlenia zawartości strony kończy się jednak
sukcesem.

Wynika to z faktu, że musimy jeszcze odpowiedni skonfigurować
identyfikacje i autoryzację. W tym celu dodajemy do pliku Web.config
następującą treść:
<authorization>
<deny
users=”*”>
<allow
users=”nazwaKomputera\UserName”>
</authorization>
Przy próbie uruchomienia strony powinno pojawić się wówczas
następujące okno.
Aby wejść na stronę musimy podać login i hasło. W przypadku
identyfikacji Windows loginy i hasła użytkowników pokrywają się z loginami i
hasłami używanymi w systemie operacyjnym.
Wyobraźmy sobie sytuację, w której w systemie operacyjnym
istnieją konta dla pięćdziesięciu różnych użytkowników. W metodzie podanej
powyżej loginy wszystkich tych osób musiałyby znajdować się w pliku
konfiguracyjnym aplikacji. W takim przypadku o wiele łatwiej jest zamieścić w
nim następującą klauzulę.
<authorization>
<deny
users=”?”>
</authorization>
W tym przypadku aplikacja będzie odrzucać wszystkich
użytkowników, niezidentyfikowanych przez system operacyjny. Uruchamiając
aplikację na komputerze, na którym znajduje się nasza instancja serwera IIS
okienko, w którym podajemy login i hasło nie pojawi się. Chcąc jednak zalogować
się na stronę na przykład za pośrednictwem sieci Internet, będziemy musieli
podać login i hasło.
Identyfikacja Windows daje twórcą aplikacji internetowych
wiele różnych możliwości. Wyobraźmy sobie sytuację, w której przygotowujemy
stronę, na której zamieszczane będą wyłącznie materiały przeznaczone dla
administratorów systemu Windows. Natomiast użytkownicy, nie będący
administratorami, przy próbie otwarcia strony powinni być przekierowywani do
miejsca, zawierającego stosowną informację. Funkcjonalność tą możemy w łatwy
sposób osiągnąć używając do tego obiektu User. Metoda PageLoad naszej aplikacji
wyglądać będzie wówczas następująco:
protected void Page_Load(object sender, EventArgs e)
{
if
(this.User.IsInRole("Administratorzy"))
{
this.Response.Write("Jesteś
administratorem. Witaj w serwisie");
}
else
{
this.Response.Redirect("StronaInformacyjna.aspx");
}
}
Wykorzystana przeze mnie metoda IsInRole, jako parametr
otrzymuje nazwę grupy w systemie użytkownika. Jeżeli użytkownik do niej
rzeczywiście należy metoda zwraca wartość True. W przeciwnym wypadku zwracana
jest wartość False.
Drugim, stosowanym znacznie częściej przez twórców aplikacji
internetowych, działających w Internecie, trybem identyfikacji użytkownika jest
Forms Authentication. Chcąc wykorzystać ten tryb w swojej aplikacji
modyfikujemy jej plik konfiguracyjny w następujący sposób.
<authentication
mode="Forms" >
<forms loginUrl="Login.aspx" >
<credentials passwordFormat="Clear">
<user name="Nazwa_Uzytkownika"
password="Haslo_Uzytkownika"/>
</credentials>
</forms>
</authentication>
<authorization>
<deny users="?" />
</authorization>
W przypadku takiej konfiguracji aplikacji nieautoryzowany
użytkownik będzie zawsze przenoszony na stronę Login.asxp. Strona ta powinna
umożliwiać zalogowanie się do serwisu, na przykład poprzez podanie loginu i
hasła. W powyższym przykładzie dane dotyczące użytkowników znowu przechowywane
są bezpośrednio w pliku konfiguracyjnym. Jest to jednak sytuacja zdecydowanie
nie polecana, w przypadku tworzenia „rzeczywistej” aplikacji, która miałaby
funkcjonować w sieci Internet. W tym przypadku loginy i hasła użytkowników powinny
być przechowywane w zewnętrznym systemie bazodanowym, najlepiej w formie
zaszyfrowanej.
Jak powinna wyglądać zawartość strony Login.aspx. Oprogramowanie
procesu logowania użytkownika w ASP.NET 2.0 ułatwiają nowo wprowadzone
kontrolki, takie jak Login, LoginStatus, czy PasswordRecovery. My spróbujemy
jednak przeprowadzić proces identyfikacji użytkownika wykorzystując do tego dwa
proste pola tekstowe oraz przycisk. Zamieśćmy wspomniane obiekty (o nazwach,
odpowiednio: txtLogin, txtPassword, btnSubmit) na formatce Login.aspx.
Następnie oprogramujmy zdarzenie naciśnięcia przycisku w następujący sposób:
protected void
Button1_Click(object sender, EventArgs e)
{
if(FormsAuthentication.Authenticate(this.txtLogin.Text,
this.txtPassword.Text))
{
FormsAuthentication.RedirectFromLoginPage(this.TextBox1.Text,
true);
}
else
{
this.Response.Write("Niepoprawny
login lub hasło!");
}
}
W projekcie Visual Studio powinniśmy w tym momencie posiadać
następujące pliki – opisane powyżej plik Web.config oraz Login.asx i
Login.aspx.cs. Dodajmy do projektu formatkę Default.aspx, zawierającą cenne
informacje, które nie powinny wpaść w niepowołane ręce J. Następnie skompilujmy projekt i spróbujmy otworzyć stronę
Default.aspx woknie przeglądarki. Zostaniemy automatycznie przeniesieni na
formatkę Login.aspx, gdzie będziemy musieli podać login i hasło.

W przypadku podania danych, niezgodnych z tymi z pliku
konfiguracyjnego, na ekranie ujrzymy stosowny komunikat. Natomiast, gdy podamy
prawidłowy login i hasło zostaniemy przeniesieni na stronę Default.aspx.

Przytoczony przeze mnie powyżej kod zawiera dwie ważne
metody. Pierwsza z nich Authenticate, jako parametry otrzymuje login i hasło,
pobrane z pól tekstowych na formatce Login.aspx. Zwraca ona wartość True,
jeżeli podane dane są poprawne. Natomiast metoda RedirectFromLoginPage, jak
sama nazwa wskazuje, przekierowuje użytkownika ze strony, oznaczonej w pliku
konfiguracyjnym, jako loginUrl.
Powyższy tekst, przedstawia zaledwie niewielki ułamek
informacji, związanych w procesami identyfikacji i autoryzacji użytkownika w
aplikacjach internetowych. Serdecznie zachęcam wszystkich do pogłębiania wiedzy
w tym temacie, jako że zapewnie wcześniej czy później okaże się ona niezbędna.
Bardziej zaawansowani użytkownicy zechcą zapewnie skorzystać z nowych
kontrolek, udostępnianych w wersji .NET Framework 2.0, co prawdopodobnie
znacząco przyśpieszy proces tworzenia tego aspektu działania aplikacji.