Как реализовать проверку подлинности на основе форм в приложении ASP.NET с помощью C#.NET

Переводы статьи Переводы статьи
Код статьи: 301240 - Vizualiza?i produsele pentru care se aplic? acest articol.
Развернуть все | Свернуть все

В этой статье

Аннотация

В этой статье показано, как реализовать на основе форм Проверка подлинности с помощью базы данных для хранения пользователей.

Требования

В следующем списке представлены рекомендуемого оборудования, программного обеспечения, сетевой инфраструктуры и пакетов обновления, необходимо:
  • Microsoft Visual Studio.NET
  • Интернет информации Microsoft Services (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 документации или документации QuickStart, указанной в </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 в Анализатор запросов. В списке баз данных нажмите кнопку pubs, и сценарий. Это создает образец таблицы пользователей и заполняет таблицу в База данных Pubs, используемые в этом примере приложение.

Создайте страницу Logon.aspx

  1. Добавьте новую веб-форму с именем проекта Logon.aspx.
  2. Откройте страницу Logon.aspx в редакторе и переключитесь в HTML Просмотр.
  3. Скопируйте следующий код и использовать Вставить как HTML параметр на Редактирование меню Вставка кода между<form>теги:<b00></b00></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 событие. Пример кода предназначен для обоих сценариев. Можно использовать любой из их в соответствии со своими требованиями.
    • Вызов RedirectFromLoginPage метод для автоматического создания файла cookie проверки подлинности форм и перенаправить пользователя на соответствующую страницу 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>теги:<b00></b00></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), таким образом, ее можно легко изменить, если необходимости.
  • Может потребоваться дополнительный код для предотвращения атак злоумышленников, пытающихся получить Используйте различные сочетания паролей от входа в систему. Например можно Таким образом, принимает только два или три попытки входа в систему. Если пользователь не может Войдите в число попыток, нужно установить флаг Запретить этому пользователю войти в систему до этого пользователя разрешает свои базы данных учетная запись, перейдите на другую страницу или технической поддержки. В дополнение к этому следует добавить соответствующие ошибки обработки везде необходимости.
  • Поскольку пользователь идентифицируется на основании проверки подлинности файл «cookie», можно использовать протокол SSL (Secure Sockets Layer) на это приложение таким образом что можно заблуждение файл cookie проверки подлинности и другими полезными Информация, которая находится в процессе передачи.
  • Проверка подлинности на основе форм требует, что ваш клиент принимает или разрешить файлы cookie в своих обозревателях.
  • В время ожидания параметр <authentication></authentication> раздел конфигурации определяет временной интервал проверки генерируется файл cookie проверки подлинности. Выберите значение, которое предоставляет повышения производительности и безопасности.
  • Некоторые буферы в Интернете и промежуточных прокси-серверы могут кэшировать ответы веб-сервера, которые содержат заголовки Set-Cookie, которые затем возвращен другим пользователем. Поскольку проверка подлинности на основе форм использует файл cookie для проверки подлинности пользователей, это может привести к пользователям случайно (или преднамеренно) олицетворять другого пользователя путем получения cookie из промежуточных прокси-сервера или кэш-памяти, изначально не предназначен для них.

Ссылки

Для получения дополнительных сведений о том, как реализовать простой Проверка подлинности на основе форм, который использует <credentials></credentials> раздел для хранения имен и паролей пользователей, обратитесь к следующему GotDotNet ASP.NET примеров:
Проверка подлинности на основе форм
http://QuickStarts.ASP.NET/QuickStartv20/ASPNET/doc/Security/FormsAuth.aspx
Для получения дополнительных сведений о том, как реализовать на основе форм проверки подлинности с использованием XML-файл для хранения пользователей и паролей, обратитесь к Следующий раздел.NET Framework пакет средств разработки программного обеспечения (SDK) документация:
Проверка подлинности форм с помощью файла пользователя XML
http://msdn2.Microsoft.com/en-us/library/1b1y85bh (vs.71) .aspx
Для получения дополнительных сведений о ASP.NET веб-приложений безопасности, обратитесь к следующей корпорации Майкрософт.Руководство разработчика платформы документация:
ASP.Безопасность NET веб-приложений
http://msdn2.Microsoft.com/en-us/library/330a99hc (vs.71) .aspx
Для получения дополнительных сведений о System.Web.Security пространство имен, обратитесь к следующей корпорации Майкрософт.NET Framework Справочная документация:
Пространство имен System.Web.Security
http://msdn2.Microsoft.com/en-us/library/System.Web.Security (vs.71) .aspx
Для получения дополнительных сведений о ASP.NET конфигурации, обратитесь к следующие корпорации Майкрософт.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
Для получения общих сведений о ASP.NET, обратитесь к следующей группе новостей MSDN:
Microsoft.Public.dotnet.Framework.ASPNET

Свойства

Код статьи: 301240 - Последний отзыв: 22 сентября 2011 г. - Revision: 5.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 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке: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