W konfiguracji uwierzytelniania Forms nie znajduje się informacja (oczywiście nie licząc ewentualnego elementu credentials) o tym, gdzie znajdują się dane, do których będą porównywane z danymi przekazywanymi przez użytkownika, w celu potwierdzenia jego tożsamości. Mechanizm uwierzytelniania Forms korzysta z membership providera przy dostępie do źródła danych, w których są przechowywane dane wykorzystywane do potwierdzenia tożsamości użytkownika.
ASP.NET Membership umożliwia programiście łatwą walidację oraz zarządzanie danymi użytkowników aplikacji internetowej. Udostępnia funkcjonalności do walidacji danych potwierdzających tożsamość użytkownika, tworzenie oraz modyfikowanie użytkowników, zarządzanie danymi użytkowników (takimi jak hasło lub adres e-mail).
Mechanizm ASP.NET membership pierwotnie został stworzony do wykorzystywania w aplikacjach ASP.NET. Istnieje możliwość wykorzystywania go w aplikacjach tworzonych w innych technologiach niż ASP.NET (np. Windows Forms).
ASP.NET Membership wspiera następujące czynności:
- Tworzenie nowych użytkowników;
- Przechowywanie informacji o użytkowniku (np. login, hasło) w Microsoft SQL Sever, Active Directory lub innych alternatywnych źródłach danych;
- Uwierzytelnianie użytkowników odwiedzających aplikację internetową. Programista może uwierzytelniać użytkowników programowo lub zbudować kompletny system uwierzytelniania za pomocą kontrolek ASP.NET bez konieczności pisania kodu;
- Zarządzanie hasłami, obejmujące czynności takie jak tworzenie nowego, zmianę istniejącego, czy resetowanie zapomnianego hasła. W zależności od ustawień ASP.NET membership umożliwia również resetowanie hasła za pomocą zapasowego pytania i odpowiedzi zdefiniowanych przez użytkownika w czasie tworzenia;
- Przypisanie użytkownikowi unikalnego identyfikatora, dzięki któremu można identyfikować go z pozostałymi elementami aplikacji lub integrować z takimi mechanizmami jak autoryzacja lub personalizacja;
- Stworzenie własnego membership providera, który będzie przechowywał dane w innym źródle danych niż dostępne membership providery;
Aby wykorzystać w aplikacji ASP.NET membership provider należy odpowiednio skonfigurować aplikację. Wymagane są następujące kroki:
- Ustawienie opcji membership providera w pliku konfiguracyjnym web.config. Domyślnie membership provider jest włączony. Dodatkowo programista może zdefiniować, z jakiego typu membership providera chce korzystać (w praktyce oznacza to, że określa typ bazy danych oraz jej lokalizację). Domyślny membership provider wykorzystuje do przechowywania danych użytkowników silnik bazy danych MS SQL Server. Programista może również użyć do przechowywania danych Active Directory lub inne źródło danych;
- Skonfigurowanie aplikacji, aby wykorzystywała uwierzytelnianie Forms. Programista na ogół tworzy strony lub foldery, do których dostęp mają tylko uwierzytelnieni użytkownicy;
- Stworzenie kont użytkowników w membership providerze. Programista może zrobić to na kilka różnych sposobów. Może wykorzystać opisany wcześniej Web Site Administration Tool, który udostępnia kreator tworzenia nowych użytkowników. Ewentualnie może stworzyć stronę, na której umieści kontrolkę CreateUser za pomocą, której użytkownicy będą tworzyć konta w aplikacji;
ASP.NET membership provider konfiguruje się w pliku konfiguracyjnym web.config za pomocą elementu membership w elemencie system.web. Składnia elementu membership znajduje się na listingu 9.
1: <membership
2: defaultProvider="nazwa membership"
3: userIsOnlineTimeWindow="czas w minutach"
4: hashAlgorithmType="SHA1">
5: <providers>...</providers>
6: </membership>
Znaczenie poszczególnych atrybutów elementu membership przedstawia tabela poniżej.
|
Nazwa atrybutu
|
Opis atrybutu
|
|
defaultProvider
|
Określa nazwę domyślnego membership providera, którego definicja znajduje się elemencie providers (opisanego niżej). Domyślna wartość to AspNetSqlProvider.
|
|
userIsOnlineTimeWindow
|
Określa czas w minutach, przez jaki użytkownik jest uważany za bycie online od ostatniej aktywności na stronie. Domyślna wartość to 15 minut.
|
|
hashAlgorithmType
|
Określa nazwę algorytmu wykorzystywanego do szyfrowania haseł użytkowników. Domyślna wartość to SHA1.
|
Element membership może zwierać w sobie element providers . W tym elemencie definiuje się providery do źródła danych, które wykorzystuje ASP.NET membership. Element providers może zawierać trzy elementy w sobie: add , remove oraz clear , co pokazano na listingu poniżej.
1: <providers>
2: <add.../>
3: <remove name="nazwa providera"/>
4: <clear/>
5: </providers>
Element clear usuwa wszystkie zdefiniowane wcześniej ASP.NET membership providery. Należy pamiętać, że w globalnych plikach konfiguracyjnych są zdefiniowane domyślne membership providery.
Element remove usuwa zdefiniowany wcześniej provider o określonej nazwie przez atrybut name. Element remove na listingu poniżej spowoduje usunięcie domyślnego membership providera AspNetSqlProvider zdefiniowanego w pliku Machine.config.
1: <providers>
2: <remove name=" AspNetSqlProvider"/>
3: </providers>
Natomiast element add określa ustawienia nowego providera. Z racji, że różne membership provider potrzebują różnych danych do działania, element add posiada różne atrybuty. Na listingu niżej znajdują się atrybuty elementu add dostępne w przypadku membership providera wykorzystującego bazę danych MS SQL Server (klasa SqlMembershipProvider ):
1: <add name="string"
2: type="string"
3: connectionStringName="string"
4: applicationName="MyApplication"
5: commandTimeout=”30”
6: description=""
7: enablePasswordRetrieval="false"
8: enablePasswordReset="true"
9: requiresQuestionAndAnswer="true"
10: requiresUniqueEmail="false"
11: passwordFormat="Hashed"
12: maxInvalidPasswordAttempts="5"
13: passwordAttemptWindow="10"
14: minRequiredPasswordLength="7"
15: minRequiredNonalphanumericCharacters="1"
16: passwordStrengthRegularExpression=""
17: />
Tabela opisująca poszczególne atrybuty elementu add:
|
Nazwa atrybutu
|
Opis atrybutu
|
|
name
|
Określa nazwę instancji providera. Wartość ta jest używana przez atrybut defaultProvider elementu membership do określenia domyślnego membership providera w aplikacji. Również wartość ta jest wykorzystywana w przypadku korzystania z elementu remove.
|
|
type
|
Określa nazwę typu membership providera, który dziedziczy po klasie MembershipProvider.
|
|
connectionStringName
|
Określa nazwę connection stringa zdefiniowanego w elemencie connectionStrings pliku web.config, z którego ma korzystać membership provider.
|
|
applicationName
|
Określa nazwę aplikacji, pod którą użytkownicy są przechowywani w źródle danych. Mechanizm membership provider umożliwia przechowywanie danych użytkowników z różnych aplikacji w jednym źródle danych (atrybut applicationName określa konkretną aplikacje). Ewentualnie kilka aplikacji może korzystać z tych samych danych, wtedy każda z nich musi mieć ustawiony taką samą nazwę aplikacji.
|
|
commandTimeout
|
Określa czas w sekundach, po których następuje time out w połączeniu z bazą danych. Domyślna wartość to 30 sekund, co oznacza, że membership provider przerwie operacje na bazie po upłynięciu tego czasu.
|
|
description
|
Atrybut stanowi opis danej konfiguracji membership providera.
|
|
enablePasswordRetrieval
|
Określa, czy membership provider umożliwia odzyskiwania hasła dla użytkownika, który je zapomniał. Domyślna wartość to false. Niektóre membership providery wbudowane w ASP.NET nie umożliwiają odzyskiwanie hasła.
|
|
enablePasswordReset
|
Określa, czy membership provider umożliwia resetowanie (wygenerowanie nowego i nadpisanie nim starego) zapomnianego hasła w przypadku, gdy zapomniał je użytkownik. Domyślna wartość to true.
|
|
requiresQuestionAndAnswer
|
Atrybut definiuje, czy podczas odzyskiwania hasła lub jego resetowania wymagana jest podanie odpowiedzi na pytanie pomocnicze utworzone podczas zakładania konta. Domyślna wartość to true.
|
|
requiresUniqueEmail
|
Określa, czy konta użytkowników powinny posiadać unikalny adres e-mail, czy mogą być różne konta o takich samych e-mailach. Domyślna wartość do true.
|
|
passwordFormat
|
Określa format, w jakim są przechowane hasła w bazie. Dostępne wartości to:
- Clear – hasło jest przechowywane w jawnej postaci;
- Hashed – hasło jest zaszyfrowane za pomocą algorytmu SHA;
- Encrypted – hasło jest zaszyfrowane za pomocą algorytmu, który jest zdefiniowany i skonfigurowany w elemencie machineKey pliku konfiguracyjnego web.config;
|
|
maxInvalidPasswordAttempts
|
Określa ilość niepoprawnego podania hasła lub odpowiedzi do pytania pomocniczego, po którym następuje zablokowanie konta. Domyślna wartość to 5.
|
|
passwordAttemptWindow
|
Określa czas w minutach, przez który po niepoprawnym podaniu hasła przez użytkownika, nie będą zbierane informacje o nieudanych próbach wpisania hasła. Domyślna wartość to 10.
|
|
minRequiredPasswordLength
|
Określa minimalną długość hasła użytkownika. Domyślna wartość to 7.
|
|
minRequiredNonalphanumericCharacters
|
Określa ilość znaków w haśle, które nie są znakami alfanumerycznymi. Domyślna wartość to 1.
|
|
passwordStrengthRegularExpression
|
Określa wyrażenie regularne, które sprawdza, czy hasło ma poprawny format i czy spełnia wymagania odnośnie złożoności hasła. Domyślna wartość to puste wyrażenie.
|
Kolejność elementów add, remove oraz clear ma znaczenie w konfiguracji membership providerów. Pierw dodanie definicje membership providera za pomocą elementu add, a następne dodanie elementu clear spowoduje, że po uruchomieniu aplikacji, nie będzie skonfigurowanego membership providera. Z odwrotnej kolejności elementów add oraz clear, zdefiniowany będzie jeden membership provider, który będzie skonfigurowany za pomocą dodanego elementu add.
W ASP.NET domyślnie są dostępne dwa membership providery, które zostaną opisane w dwóch następnych podrozdziałach:
- SqlMembershipProvider, który przechowuje dane w bazie danych silnika MS SQL Server;
- ActiveDirectoryMembershipProvider, który korzysta z danych znajdujących się w Active Direcotry;
Dodatkowo programista może łatwo stworzyć swojego własnego membership providera, co również zostanie później opisane.
Tags: uwierzytelnianie,
asp.net,
membership provider
Categories: Techniczne
a2b4e03b-cb7d-41aa-a52a-5ab81a61b8c9|0|.0