Konfiguracja witryny internetowej
ASPNET,
zarządzanie dostawcami i parametrami
Cele ćwiczenia
- Zapoznanie z mechanizmem
kontroli bezpieczeństwa witryny na bazie formularzy.
- Zapoznanie z Narzędziem do
administrowania witryną sieci Web.
- Zapoznanie z plikami
konfiguracyjnymi.
- Zapoznanie z mechanizmem
kontroli bezpieczeństwa witryny.
- Zapoznanie z programowym
odczytem parametrów konfiguracji.
- Zapoznanie z programową
modyfikacją plików konfiguracyjnych
Konfiguracja dostawców użytkowników i ról
Na listingu 1 przedstawiono
uproszczony fragment kodu pochodzącego z pliku machine.config
zawierający konfigurację domyślnych dostawców użytkowników AspNetSqlMembershipProvider i ról AspNetSqlRoleProvider.
Listing 1. Kod dodania domyślnego dostawcy użytkowników AspNetSqlMembershipProvider i ról AspNetSqlRoleProvider pochodzący z pliku machine.config
<system.web>
<membership>
<providers>
<add name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="LocalSqlServer"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
applicationName="/"
requiresUniqueEmail="false"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="7"
minRequiredNonalphanumericCharacters="1"
passwordAttemptWindow="10"
passwordStrengthRegularExpression=""/>
</providers>
</membership>
<roleManager>
<providers>
<add name="AspNetSqlRoleProvider"
connectionStringName="LocalSqlServer"
applicationName="/"
type="System.Web.Security.SqlRoleProvider"/>
</providers>
</roleManager>
</system.web>
Zmiany parametrów dostawców
domyślnych można dokonać redefiniując domyślnych dostawców w lokalnych plikach web.config.
Kod redefinicji maże bazować na listingu 1 z uwzględnieniem konieczności usunięcie
dostawcy zdefiniowanego w nadrzędnym pliku konfiguracyjnym, poleceniem <clear /> lub <remove name= "AspNetSqlMembershipProvider"/>. Polecenia <clear /> i <remove /> należy umieścić bezpośrednio przed znacznikiem <add />.
Znaczenie i domyślne wartości
atrybutów dostawcy członkowstwa:
- name="AspNetSqlMembershipProvider"
– nazwa dostawcy,
- connectionStringName="LocalSqlServer"
– nazwa łańcaucha połączenia do bazy danych użytkowników,
- enablePasswordRetrieval="false"
– określa, czy możliwe jest odzyskiwanie hasła?
- enablePasswordReset="true"
– określa, czy możliwa jest zmiana hasła?
- requiresQuestionAndAnswer="true"
– określa czy jest wymagane pytanie z odpowiedzią używane przy
odzyskiwaniu hasła,
- applicationName="/"
– nazwa aplikacji; operowanie parametrem umożliwia przechowywanie w jednej
bazie danych wspólnych lub wyłącznych użytkowników różnych aplikacji,
- requiresUniqueEmail="false"
– określa, czy jest wymagany unikalny adres Email dla każdego użytkownika?
- passwordFormat="Hashed"
– format hasła (metoda szyfrowania hasła)
- Clear
– brak szyfrowania,
- Hashed
– SHA1 hashing algorithm,
- Encrypted
– metoda szyfrowania skonfigurowana w sekcji
<machineKey … />,
- minRequiredPasswordLength="7"
– minimalna długość hasła,
- minRequiredNonalphanumericCharacters="1"
– minimalna liczba niealfanumerycznych znaków w haśle,
- maxInvalidPasswordAttempts="5"
– maksymalna liczba prób logowania,
- passwordAttemptWindow="10"
– całkowita liczba minut, w ciągu których można przeprowadzić maksymalna
liczbę nieudanych logowań, zanim konto zostanie zablokowane.
- Zablokowanie konta następuje
poprzez zmianę wartości logicznej w kolumnie IsLockedOut tabeli aspnet_Membership
bazy danych użytkowników
- aspnet_Membership.[IsLockedOut]=true – konto zablokowane
- Użytkownik nie jest informowany
o zablokowaniu konta i nie może się zalogować nawet podając poprawne
hasło. Odblokowanie konta wymaga dokonania zmiany w bazie danych.
Polecenia
- Utwórz nową witrynę w lokalnym
systemie plików.
- Bazując na listingu 1 dokonaj
redefinicji domyślnego dostawcy użytkowników i ról.
- Przy pomocy Web Site
Administration Tool utwórz nowego użytkownika.
- Dodaj stronę rejestracja.aspx
umieść na niej kontrolkę CreateUserWizard
, uruchom stronę i utwórz nowego użytkownika.
- Zmień wartość atrybutu requiresQuestionAndAnswer
z true na false i ponownie
utwórz użytkownika przy pomocy Web Site Administration Tool i
strony rejestracja.aspx, zaobserwuj zmianę wyglądu kontrolek.
- Zmień inne atrybuty domyślnego
dostawcy użytkowników i przetestuj wpływ zmian na działanie aplikacji.
- Dodaj do aplikacji strony
odzyskiwania i zmiany hasła, odpowiednio skonfiguruj dostawcę. Do
odzyskiwania hasła należy skonfigurować ustawienia SMTP poczty e-mail przy
pomocy Web Site Administration Tool.
- Przetestuj działanie stron
zmiany i odzyskiwania hasła.
- Zmień nazwę aplikacji i
sprawdź, przy pomocy Web Site Administration Tool, istniejących
użytkowników, dodaj nowych.
- Wróć do starej nazwy aplikacji
i ponownie sprawdź użytkowników.
- Przetestuj blokowanie konta po
przekroczeniu maksymalnej liczby nieudanych logowań, wykonanie polecenia
wymaga dodania do aplikacji strony logowania.
- Odblokuj konto dokonując zmiany
w bazie danych i sprawdź skuteczność odblokowania konta poprzez ponowne
zalogowanie.
Dodanie do aplikacji nowych dostawców użytkowników i ról
- Dodaj do pliku web.config w sekcji <system.web> nowego dostawcę
użytkowników o nazwie użytkownicy
(skorzystaj z listingu 1).
- Dodaj do pliku web.config
w sekcji <system.web> nowego
dostawcę ról o nazwie role.
- Dodaj do pliku web.config
łańcuch połączenia wskazujący bazę użytkowników na lokalnym serwerze MS SQL Server Express Edition lub serwerze, którego
dane poda prowadzący zajęcia.
- Skonfiguruj dostawców tak, aby
korzystali z utworzonego w powyższym punkcie łańcucha połączenia.
- Przy pomocy Web Site Administration
Tool zmień domyślnych dostawców użytkowników i ról na nowo utworzonych.
- Przy pomocy Web Site
Administration Tool znajdź istniejących użytkowników, utwórz nowych.
- Edytuj plik web.config i
znajdź sposób w jaki zostali wskazani domyślni dostawcy.
Programowy odczyt parametrów konfiguracji dostawców użytkowników
- Dodaj do aplikacji nową stronę,
która odczyta i umieści w okienku tekstowym treść sekcji konfiguracji <membership> .
Listing 2. Kod odczytu treści sekcji <membership> z pliku konfiguracyjnego aplikacji
Configuration Konfigurator;
System.Web.Configuration.MembershipSection dostawcy;
Konfigurator = WebConfigurationManager.OpenWebConfiguration(@"~");
// 1 sposób adresowania sekcji
dostawcy = (MembershipSection)Konfigurator.GetSection("system.web/membership");
// 2 sposób
adresowania sekcji
dostawcy = (MembershipSection)Konfigurator.SectionGroups["system.web"].Sections["membership"];
string tekstSekcji =
dostawcy.SectionInformation.GetRawXml();
TextBox1.Text = tekstSekcji;
- Dodaj do strony listę
skonfigurowanych dostawców odczytaną z obiektu dostawcy.
- Dodaj do strony informację o
domyślnym dostawcy odczytaną z obiektu dostawcy.
- Dodaj do strony możliwość
rekonfiguracji sekcji
- poprzez zmianę treści sekcji w
okienku tekstowym i
- poprzez zmianę właściwości
obiektu dostawcy.
- Przetestuj wszystkie elementy
strony.
Przydatne instrukcje Konfigurator.Save(), SetRawXml().
Programowy odczyt parametrów konfiguracji
- Dodaj do aplikacji co najmniej
dwa parametry (ustawienia) przy pomocy Web Site Administration Tool.
- Dodaj do aplikacji co najmniej
dwa łańcuchy połączeń.
- Znajdź wprowadzone zmiany w
pliku web.config.
- Dodaj do aplikacji stronę, na
której umieszczone zostaną informacje o konfiguracji, pomocny może być
listing 3.
Kod z listingu 3
·
umieszcza w etykiecie Label1
parametry (ustawienia) aplikacji, korzystając z klasy ConfigurationManager,
·
tworzy obiekt x klasy
WebConfigurationManager
otwierający plik konfiguracyjny z katalogu wirtualnego „~” ,
·
umieszcza w etykiecie Label6
fizyczną ścieżkę pliku konfiguracyjnego,
·
umieszcza w etykiecie Label2
parametry (ustawienia) aplikacji znajdujące się w otwartym przez obiekt x pliku konfiguracyjnym i w plikach
nadrzędnych,
·
umieszcza w etykiecie Label3
łańcuchy połączeń znajdujące się w otwartym przez obiekt x pliku konfiguracyjnym iw plikach
nadrzędnych,
·
umieszcza w etykiecie Label4
nazwy wszystkich sekcji konfiguracji,
·
umieszcza w etykiecie Label5
zawartość grup sekcji.
Listing 3. Kod umieszczający w etykietach informację o
konfiguracji aplikacji (witryny) i sekcjach
Label1.Text = "<h3>Aplication settings</h3>";
for (int i = 0; i < ConfigurationManager.AppSettings.Count;
i++)
{
Label1.Text += ConfigurationManager.AppSettings.GetKey(i) + " = ";
Label1.Text += ConfigurationManager.AppSettings[i] + "<br />";
}
Configuration x = WebConfigurationManager.OpenWebConfiguration(@"~"); //
aplikacji
// Configuration
x = WebConfigurationManager.OpenWebConfiguration(@"\"); // serwera
// Configuration
x = WebConfigurationManager.OpenWebConfiguration(@"~\.."); //
nadrzędny
Label6.Text = x.FilePath;
string[] klucze =
x.AppSettings.Settings.AllKeys;
Label2.Text = "<h3>Aplication settings</h3>";
for (int i = 0; i < x.AppSettings.Settings.Count; i++)
{
Label2.Text +=
x.AppSettings.Settings[klucze[i]].Key.ToString() + "
= ";
Label2.Text +=
x.AppSettings.Settings[klucze[i]].Value.ToString() + "<br
/>";
}
Label3.Text = "<h3>Łańcuchy połączeń</h3>";
for (int i = 0; i <
x.ConnectionStrings.ConnectionStrings.Count; i++)
{
Label3.Text +=
x.ConnectionStrings.ConnectionStrings[i].Name + "
= ";
Label3.Text +=
x.ConnectionStrings.ConnectionStrings[i].ConnectionString + "<br />";
}
Label4.Text = "<h3>Sekcje</h3>";
for (int i = 0; i < x.Sections.Count; i++)
Label4.Text +=
x.Sections[i].SectionInformation.Name.ToString() + "<br
/>";
Label5.Text = "<h3>Grupy sekcji</h3>";
for (int i = 0; i < x.SectionGroups.Count; i++)
{
Label5.Text +="<h3>" +
x.SectionGroups[i].SectionGroupName + "</h3>";
for
(int k = 0; k <
x.SectionGroups[i].Sections.Count; k++)
Label5.Text +=
x.SectionGroups[i].Sections[k].SectionInformation.Name.ToString() + "<br />";
}
- Przetestuj działanie strony,
znajdź wprowadzone przez siebie parametry.
Programowa zmiana konfiguracji i pliku web.config
- Do dowolnej strony dodaj
przycisk, którego kliknięcie spowoduje
- wydruk dowolnego parametru
(ustawienia) aplikacji,
- dodanie dwóch parametrów (ustawień)
aplikacji parametr1 i parametr2,
- wydruk adresu pliku
konfiguracyjnego,
- zapisanie zmienionej
konfiguracji w pliku konfiguracyjnym,
- zapisanie kopi pliku konfiguracyjnego
w katalogu głównym aplikacji pod nazwą test.txt.
- Do dokonania zmian należy się posłużyć obiektem klasy WebConfigurationManager
– listing 4.
Listing 4. Kod zmieniający konfigurację i zapisujący zmiany w
pliku konfiguracyjnym i pliku test.txt
Configuration x = WebConfigurationManager.OpenWebConfiguration("~");
if(x.AppSettings.Settings["parametr1"]!=null)
Label1.Text =
x.AppSettings.Settings["parametr1"].Value.ToString();
x.AppSettings.Settings.Add("parametr1", "Par
1");
x.AppSettings.Settings.Add("parametr2", "Par
2");
x.AppSettings.Settings["parametr1"].Value = "Ala ma kota";
Label2.Text = "plik konfiguracyjny = " + x.FilePath;
x.Save();
x.SaveAs(Request.PhysicalApplicationPath
+ @"~\test.txt");
- Znajdź wprowadzone zmiany w
pliku web.config.
- Znajdź i edytuj plik test.txt.