UWAGA! Promocja dla firm - MICROSOFT OFFICE 365  na 12 miesiecy ZA DARMO! Tylko na CentrumXP.pl!
Wielka promocja Office 365 na CentrumXP.pl!
Do góry Skomentuj

19. Wprowadzenie do identyfikacji i autoryzacji użytkowników

19. Wprowadzenie do identyfikacji i autoryzacji użytkowników

Autor: Piotr Gaszewski Opublikowano: 16 czerwca 2006 Odsłon: 51 829

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.

Zobacz również

Komentarze

Powyższy tekst, przedstawia zaledwie niewielki ułamek informacji...TU SIE ZGADZAM!!
Daniel, 6 września 2006, 16:44
W kodzie wkradł się mały błąd: FormsAuthentication.RedirectFromLoginPage(this.TextBox1.Text, true); powinno być FormsAuthentication.RedirectFromLoginPage(this.txtLogin.Text, true); A mam takie pytanko. Bo tu jest omówione logowanie, a nie zostało nic napisane o wylogowaniu.
PeterPan, 14 lipca 2007, 21:10
drobny błąd : FormsAuthentication.RedirectFromLoginPage(this.txtLogin, true);
Kajt, 23 kwietnia 2008, 01:16
Nie podoba mi sie za mało danych nie napisaliście jak sprawdzić czy użytkownik istnieje w bazie danych jeśli nie to wywalenie tekstu żeby sie zalogował ponownie, jeśli tak przekierowanie do strony serwisu.
nielskitrolek, 29 kwietnia 2008, 20:27
To jest kurs, a nie gotowe rozwiazania ;) Wiec troche wlasnej inicjatywy i napewno efekty beda dobre!

Bart, 4 grudnia 2008, 09:32
A jak zrobić dwóch użytkowników? :( żeby kazdy miał dostep do innych podstron?
Ojejeje, 1 maja 2010, 23:18
@Ojejeje mam ten sam problem :/
Ulala, 27 maja 2010, 00:58
Hmm...Jestem zalogowany jako administrator a mimo to przekierowuje mnie na StronaInformacyjna.aspx. Pierwszy przykład tzn mode=”Windows” nie działa. Może to jest spowodowane tym że używam Visual Studio 2010 i Windows 7 a przykłady były robione w VS2005?
valdi, 16 stycznia 2011, 18:47

Dodaj swój komentarz

Zasady publikacji komentarzyZasady publikacji komentarzy

Redakcja CentrumXP.pl nie odpowiada za treść komentarzy publikowanych na stronach Portalu
i zastrzega sobie prawo do usuwania wypowiedzi, które:

  • zawierają słowa wulgarne, obraźliwe, prowokujące i inne naruszające dobre obyczaje;
  • są jedynie próbami reklamowania stron internetowych (spamowanie poprzez umieszczanie linków);
  • przyczyniają się do złamania prawa bądź warunków licencyjnych oprogramowania (cracki, seriale, torrenty itp.);
  • zawierają dane osobowe, teleadresowe, adresy mailowe lub numery GG;
  • merytorycznie nie wnoszą nic do dyskusji lub nie mają związku z tematem komentowanego newsa, artykułu bądź pliku.

Autor:

Komentarz:

Dodaj komentarz