Як здійснювати автентифікацію на основі форм у застосунку ASP.NET, використовуючи C #.NET

Переклади статей Переклади статей
Номер статті: 301240 - Показ продуктів, яких стосується ця стаття.
Розгорнути все | Згорнути все

На цій сторінці

Підсумки

У даній статті описується те, як здійснювати на основі форм Автентифікація за допомогою бази даних для онлайнове пул носіїв користувачів.

Вимоги

У цьому списку описано Рекомендоване обладнання, Підтримка програмного забезпечення, Мережева інфраструктура та пакети оновлень, що вам потрібно:
  • Microsoft Visual Studio .NET
  • Microsoft інформаційних служб Інтернету (IIS) версії 5.0 або пізнішої версії
  • Microsoft SQL Server

Створити до застосунку ASP.NET, використовуючи C# .NET

  1. Відкрити Visual Studio .NET.
  2. Створити новий ASP.NET веб-застосунку і вказати ім'я і місце розташування.

Настроїти параметри захисту у файлі Web. config

У цьому розділі показано, як додавати та змінювати в <authentication></authentication> і <authorization></authorization> конфігурації розділів для настроювання застосунку ASP.NET, щоб використовувати автентифікацію на основі форм.
  1. У провіднику рішення відкриття файлу Web. config.
  2. Змінити режим автентифікації до форми.
  3. Додати <Forms>тег і заповнити відповідні атрибути. (Щоб отримати додаткові відомості про ці атрибути, див на MSDN. документації або короткий посібник документації, перелічених у в </Forms>ПОСИЛАННЯ розділ.) Копіювати з наступний код а потім натисніть кнопку Вставити як HTML на вРедагувати меню, щоб вставити код на <authentication></authentication> розділі файлу:
    <authentication mode="Forms">
       <forms name=".ASPXFORMSDEMO" loginUrl="logon.aspx" 
       protection="All" path="/" timeout="30" />
    </authentication> 
    					
  4. Заборона доступу для анонімних користувачів в на <authorization></authorization> розділ наступним чином:
    <authorization>
       <deny users ="?" />
       <allow users = "*" />
    </authorization>
    					

Створення зразка таблиці бази даних до пул носіїв поштових скриньок користувачів подробиці

У цьому розділі демонструє, як створити зразок базу даних до зберігати ім'я користувача, пароль та роль для користувачів. Потрібні стовпці роль» Якщо потрібно зберігати ролі користувача в базі даних і здійснювати на основі ролей безпеки.
  1. На в Почати меню, натиснітьЗапуститиа потім введіть Блокнот Щоб відкрити «Блокнот».
  2. Виділити наступний код скрипт SQL, клацніть правою кнопкою миші на код а потім натисніть кнопку копія. У блокноті натисніть кнопкуВставлення на в Редагувати меню для вставлення таких код:
    if exists (select * from sysobjects where id = 
    object_id(N'[dbo].[Users]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
    drop table [dbo].[Users]
    GO
    CREATE TABLE [dbo].[Users] (
       [uname] [varchar] (15) NOT NULL ,
       [Pwd] [varchar] (25) NOT NULL ,
       [userRole] [varchar] (25) NOT NULL ,
    ) ON [PRIMARY]
    GO
    ALTER TABLE [dbo].[Users] WITH NOCHECK ADD 
       CONSTRAINT [PK_Users] PRIMARY KEY  NONCLUSTERED 
       (
          [uname]
       )  ON [PRIMARY] 
    GO
    
    INSERT INTO Users values('user1','user1','Manager')
    INSERT INTO Users values('user2','user2','Admin')
    INSERT INTO Users values('user3','user3','User')
    GO
    					
  3. Збереження файлу як Users.sql.
  4. Відкрийте на комп'ютері Microsoft SQL Server, Users.sql в Query Analyzer. У списку баз даних натисніть кнопку паби, і Запуск сценарію. Це створює зразка таблиці користувачів і заповнює таблиці в Паби бази даних для сценарій виконання з цим додатком зразка.

Створити сторінку Logon.aspx

  1. Додати нові веб-форми на проект, названий Logon.aspx.
  2. Відкрити сторінку Logon.aspx в редакторі і перейти до HTML подання елементів.
  3. Скопіюйте наведений нижче код і використовувати в Вставити як HTML Опції на в Редагувати меню вставити код між на<form>Мітки: </form>
    <h3>
       <font face="Verdana">Logon Page</font>
    </h3>
    <table>
       <tr>
          <td>Email:</td>
          <td><input id="txtUserName" type="text" runat="server"></td>
          <td><ASP:RequiredFieldValidator ControlToValidate="txtUserName"
               Display="Static" ErrorMessage="*" runat="server" 
               ID="vUserName" /></td>
       </tr>
       <tr>
          <td>Password:</td>
          <td><input id="txtUserPass" type="password" runat="server"></td>
          <td><ASP:RequiredFieldValidator ControlToValidate="txtUserPass"
              Display="Static" ErrorMessage="*" runat="server" 
              ID="vUserPass" />
          </td>
       </tr>
       <tr>
          <td>Persistent Cookie:</td>
          <td><ASP:CheckBox id="chkPersistCookie" runat="server" autopostback="false" /></td>
          <td></td>
       </tr>
    </table>
    <input type="submit" Value="Logon" runat="server" ID="cmdLogin"><p></p>
    <asp:Label id="lblMsg" ForeColor="red" Font-Name="Verdana" Font-Size="10" runat="server" />
    						
    Цю веб-форму використовується, щоб представити формі входу для користувачів, так що вони можуть надати їх ім'я користувача та пароль для входу до застосунку.
  4. Перейти до режим побудовника та зберегти сторінку.

Код обробника подій, так що це підтверджує облікові дані користувача

Цей розділ представляє код, який розміщується в код за сторінки (Logon.aspx.cs).
  1. Двічі клацніть Вхід до системи відкрити в Logon.aspx.CS файл.
  2. Імпортуйте обов'язкові простору імен у файлі код за:
    using System.Data.SqlClient;
    using System.Web.Security;
    					
  3. Створити функцію ValidateUser для перевірки фінансові дані користувача, дивлячись в бази даних. (Не забудьте змінити рядок підключення вказує на ваш база даних).
    private bool ValidateUser( string userName, string passWord )
    {
    	SqlConnection conn;
    	SqlCommand cmd;
    	string lookupPassword = null;
    
    	// Check for invalid userName.
    	// userName must not be null and must be between 1 and 15 characters.
    	if ( (  null == userName ) || ( 0 == userName.Length ) || ( userName.Length > 15 ) )
    	{
    		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of userName failed." );
    		return false;
    	}
    
    	// Check for invalid passWord.
    	// passWord must not be null and must be between 1 and 25 characters.
    	if ( (  null == passWord ) || ( 0 == passWord.Length ) || ( passWord.Length > 25 ) )
    	{
    		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Input validation of passWord failed." );
    		return false;
    	}
    
    	try
    	{
    		// Consult with your SQL Server administrator for an appropriate connection
    		// string to use to connect to your local SQL Server.
    		conn = new SqlConnection( "server=localhost;Integrated Security=SSPI;database=pubs" );
    		conn.Open();
    
    		// Create SqlCommand to select pwd field from users table given supplied userName.
    		cmd = new SqlCommand( "Select pwd from users where uname=@userName", conn );
    		cmd.Parameters.Add( "@userName", SqlDbType.VarChar, 25 );
    		cmd.Parameters["@userName"].Value = userName;
    
    		// Execute command and fetch pwd field into lookupPassword string.
    		lookupPassword = (string) cmd.ExecuteScalar();
    
    		// Cleanup command and connection objects.
    		cmd.Dispose();
    		conn.Dispose();
    	}
    	catch ( Exception ex )
    	{
    		// Add error handling here for debugging.
    		// This error message should not be sent back to the caller.
    		System.Diagnostics.Trace.WriteLine( "[ValidateUser] Exception " + ex.Message );
    	}
    
    	// If no password found, return false.
    	if ( null == lookupPassword ) 
    	{
    		// You could write failed login attempts here to event log for additional security.
    		return false;
    	}
    
    	// Compare lookupPassword and input passWord, using a case-sensitive comparison.
    	return ( 0 == string.Compare( lookupPassword, passWord, false ) );
    
    }
    					
  4. Ви можете використовувати один з двох методів для створення форм ідентифікаційним файлом cookie і перенаправлення користувача на відповідну сторінку в події cmdLogin_ServerClick . Обидва сценарії забезпечує зразки коду. Використовувати будь-який з їх відповідно до ваших вимог.
    • Телефонуйте для автоматичного створення форм ідентифікаційним файлом cookie, метод RedirectFromLoginPage і перенаправлення користувача відповідної сторінки у cmdLogin_ServerClick події:
      private void cmdLogin_ServerClick(object sender, System.EventArgs e)
      {
      if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
      	FormsAuthentication.RedirectFromLoginPage(txtUserName.Value,
      		chkPersistCookie.Checked);
      	else
      		Response.Redirect("logon.aspx", true);
      }
      						
    • Створити квиток автентифікації, зашифрувати його, створення cookie, додати до відповіді і перенаправляти користувачів. Це дає вам більше контроль в як створити файл cookie. Ви можете також включити настроюваних даних уздовж з FormsAuthenticationTicket , в цьому випадку.
      private void cmdLogin_ServerClick(object sender, System.EventArgs e)
      {
         if (ValidateUser(txtUserName.Value,txtUserPass.Value) )
         {
            FormsAuthenticationTicket tkt;
            string cookiestr;
            HttpCookie ck;
            tkt = new FormsAuthenticationTicket(1, txtUserName.Value, DateTime.Now, 
      DateTime.Now.AddMinutes(30), chkPersistCookie.Checked, "your custom data");
            cookiestr = FormsAuthentication.Encrypt(tkt);
            ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
            if (chkPersistCookie.Checked)
            ck.Expires=tkt.Expiration;	
      		    ck.Path = FormsAuthentication.FormsCookiePath; 
            Response.Cookies.Add(ck);
      
            string strRedirect;
            strRedirect = Request["ReturnUrl"];
            if (strRedirect==null)
                  strRedirect = "default.aspx";
               Response.Redirect(strRedirect, true);
         }
         else
            Response.Redirect("logon.aspx", true);
      }
      						
  5. Переконайтеся, що такий код буде додано до методу InitializeComponent в коді, що генерує веб-дизайнер форм:
    this.cmdLogin.ServerClick += new System.EventHandler(this.cmdLogin_ServerClick);
    					

Створити сторінку, default. aspx

У цьому розділі створює тестову сторінку, до якої переспрямування користувачів Після того, як вони автентифікації. Якщо користувачі перегляд цієї сторінки без першого входу на додаток вони перенаправляються на сторінці входу до системи.
  1. Перейменування наявної сторінки WebForm1.aspx як default. aspx, і Відкрийте його в редакторі.
  2. Перейдіть до подання елементів HTML і скопіювати наступний код між на<form>Мітки: </form>
    <input type="submit" Value="SignOut" runat="server" id="cmdSignOut">
    						
    Ця кнопка використовується, щоб вийти з формами перевірки автентичності сесії.
  3. Перейти до режим побудовника та зберегти сторінку.
  4. Імпортуйте обов'язкові простору імен у файлі код за:
    using System.Web.Security;
    					
  5. Двічі клацніть SignOut для відкритого коду за сторінки (Default.aspx.cs) і копіювати на наступний код в обробнику подій cmdSignOut_ServerClick :
    private void cmdSignOut_ServerClick(object sender, System.EventArgs e)
    {
       FormsAuthentication.SignOut();
       Response.Redirect("logon.aspx", true);
    }
    					
  6. Переконайтеся, що такий код буде додано до методу InitializeComponent в коді, що генерує веб-дизайнер форм:
    this.cmdSignOut.ServerClick += new System.EventHandler(this.cmdSignOut_ServerClick);
    					
  7. Зберегти та скомпілювати проекту. Тепер ви можете використовувати в застосування.

Додаткові примітки

  • Ви можете зберігати паролі надійно в базу даних. Ви Функція FormsAuthentication клас утиліта названий HashPasswordForStoringInConfigFile шифрування паролів, перш ніж вони зберігаються в базі даних або файл конфігурації.
  • Ви можете зберігати відомості про підключення SQL у в Настроювання файлу (Web. config), так що ви можете легко змінити його, якщо необхідні.
  • Ви можете розглянути, додавши код, щоб запобігти хакерів, які намагаються сценарій виконання різних комбінацій паролів від входу. Наприклад, ви можете включати логіку, яка приймає тільки два-три спроби входу до системи. Якщо користувач не може Увійдіть певну кількість спроб, може знадобитися установити позначку в бази даних, щоб не дозволити йому увійти, поки що користувача re-enables його або її до обліковий запис А комп'ютера, відвідавши на іншу сторінку або зателефонувавши рядок «Кому» підтримки. У Крім того, ви повинні додати відповідні Помилка обробки будь-де необхідні.
  • Оскільки користувач визначається на основі автентифікація печиво, ви можете за допомогою протокол SSL (SSL) на це додаток так що ніхто не може обдурити ідентифікаційним файлом cookie і будь-яких інших цінних відомості про те що передається.
  • Автентифікацію на основі форм вимагає, що ваш клієнт прийняти або включити куки на свій браузер.
  • Параметр часу очікування на <authentication></authentication> конфігурації розділу керує інтервал, при якій на регенерується ідентифікаційним файлом cookie. Ви можете вибрати значення, яке надає краще продуктивності та безпеки.
  • Певні посередницьких послуг проксі і кеш в Інтернеті може кеш веб-сервер відповіді, які містять Set-Cookie заголовки, які потім повернув інший користувач. Оскільки автентифікації на основі форм використовує куки для автентифікації користувачів, це може викликати користувачам випадково (чи навмисне) видавати себе за іншого користувача отримувати cookie від посередницьких послуг проксі-сервера або кеш-пам'ять, яка була спочатку не призначені для них.

Посилання

Для отримання додаткових відомостей про те, як здійснювати прості автентифікацію на основі форм, які використовуються в <credentials></credentials> розділ для збереження користувачів і паролі, зверніться до наступних короткий посібник ASP.NET GotDotNet зразка:
Автентифікацію на основі форм
http://quickstarts.ASP.net/QuickStartv20/aspnet/doc/Security/formsauth.aspx
Для отримання додаткових відомостей про те, як здійснювати на основі форм автентифікації, який використовує XML-файл для збереження користувачів і паролі, зверніться до в Наступна тема в .NET Framework програмного забезпечення розвитку Kit (SDK) Документація:
Для автентифікації форм за допомогою XML-файлу користувачів
http://msdn2.Microsoft.com/EN-US/Library/1b1y85bh (vs.71). aspx
Для отримання додаткових відомостей про безпеки ASP.NET веб-додатків, Зверніться до посібника такі Microsoft .NET Framework розробника Документація:
Безпеки ASP.NET веб-додатків
http://msdn2.Microsoft.com/EN-US/Library/330a99hc (vs.71). aspx
Щоб отримати додаткові відомості про System.Web.Security простір імен зверніться до наступних Microsoft .NET Framework Посилання на документацію:
System.Web.Security простір імен
http://msdn2.Microsoft.com/EN-US/Library/System.Web.Security (vs.71). aspx
Щоб отримати додаткові відомості про конфігурацію ASP.NET, зверніться до в наступні статті посібнику розробника Microsoft .NET Framework:
ASP.NET конфігурації
http://msdn2.Microsoft.com/EN-US/Library/aa719558 (VS.71). aspx

ASP.NET конфігурації розділів
http://msdn2.Microsoft.com/EN-US/Library/w7w4sb0w (vs.71). aspx
Інформація про правила безпеки ASP.NET зверніться до Цей MSDN документ:
Автентифікації в ASP.NET: керівництво безпеки .NET
http://msdn2.Microsoft.com/EN-US/Library/ms978378.aspx

Властивості

Номер статті: 301240 - Востаннє переглянуто: 15 листопада 2012 р. - Редакція: 3.0
Застосовується до:
  • Microsoft ASP.NET 1.1
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft ASP.NET 1.0
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
Ключові слова: 
kbconfig kbhowtomaster kbsecurity kbweb kbmt KB301240 KbMtuk
Машинний переклад
УВАГА! Цю статтю переклала програма машинного перекладу Microsoft, а не людина. Корпорація Microsoft пропонує вам як машинні переклади, так і переклади фахівців, щоб Ви мали доступ до всіх статей бази знань рідною мовою. Проте стаття, яку переклав комп’ютер, не завжди бездоганна. Вона може містити лексичні, синтаксичні або граматичні помилки. Так само помиляється іноземець, спілкуючись вашою рідною мовою. Корпорація Microsoft не несе відповідальність за жодні неточності, помилки або шкоду, завдану неправильним перекладом змісту або його використанням з боку користувачів. Крім того, корпорація Microsoft часто оновлює програму машинного перекладу.
Клацніть тут, щоб переглянути цю статтю англійською мовою: 301240

Надіслати відгук

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com