Подтвердить что ты не робот

Аутентификация через web.config не аутентифицируется в ASP.net 3.5

Это одна из этих вещей, которая должна быть предельно простой, и я просто не могу понять, почему она не работает.

Я пытаюсь настроить очень быструю аутентификацию для приложения ASP.net 3.5, но сохраняя имена пользователей и пароли в файле web.config(я знаю, что это не очень безопасно, но это внутреннее приложение, которое меня постоянно спрашивает для добавления и удаления логинов, так что это самый быстрый способ сделать это).

Итак, соответствующий раздел конфигурации выглядит следующим образом:

<authentication mode="Forms">
   <forms loginUrl="~/login.aspx">
    <credentials>
     <user name="user" password="password" />
     <user name="user2" password="password2" />
    </credentials>
   </forms>
  </authentication>

  <authorization>
    <deny users="?"/>
  </authorization>

И, на странице входа, код выглядит следующим образом:

string username = tbUsername.Text;
string password = tbPassword.Text;

if (FormsAuthentication.Authenticate(username, password))
    FormsAuthentication.RedirectFromLoginPage(username, false);

Но, FormsAuthentication.Authenticate(имя пользователя, пароль) всегда возвращает false. И я не могу понять, почему.

Я даже пытался использовать Memberhip.ValidateUser, но это просто добавляет в локальную базу данных папку App_Data.

Есть ли что-то действительно основное, что я забыл здесь или это вообще не работает в .net 3.5?

4b9b3361

Ответ 1

Я не уверен, что это изменилось в .NET 3.5, но элемент <credentials> имеет атрибут passwordFormat, который определяет формат паролей в web.config. Из документации MSDN для .NET 3.5 формат по умолчанию - SHA1.

Если вы используете пользовательские имена и пароли с открытым текстом в своем web.config, вы должны использовать:

...
<credentials passwordFormat="Clear">
...

Событие, хотя это внутреннее приложение, я по-прежнему рекомендую по крайней мере хэшировать пароль, а не оставлять его в ясном тексте.

Ответ 2

Я думаю, причина в том, что вы не указали парольFormat. http://msdn.microsoft.com/en-us/library/e01fc50a.aspx

По умолчанию используется SHA1, поэтому ваш чистый текст фактически не используется должным образом.

Ответ 3

Вы должны указать <credentials passwordFormat="Clear"> при сохранении пароля в открытом тексте.

Альтернативы - это зашифрованные пароли с использованием MD5 или SHA1.

См. http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication.hashpasswordforstoringinconfigfile.aspx для функции для кодирования пароля.

Вы также можете рассмотреть возможность использования некоторых доступных пользовательских элементов управления, которые много делают для вас автоматически. Посмотрите раздел "Логин" в панели инструментов управления в Visual Studio.

Следующая страница предоставит все, что вам нужно для этого простого случая, а внешний вид элемента управления Login полностью настраивается:

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
    {
        e.Authenticated = FormsAuthentication.Authenticate(Login1.UserName, Login1.Password);
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Login</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Login ID="Login1" runat="server" onauthenticate="Login1_Authenticate">
        </asp:Login>
    </div>
    </form>
</body>
</html>

Ответ 4

Еще одна возможная ошибка, заключающаяся в том, что имя пользователя "Admin" кажется особенным и не выполнено, если вы проверяете учетные данные, установленные в web.config

<credentials>
 <user name="Admin" password="somepassword" />  //Authentication always returns false for me
</credentials>

<credentials>
 <user name="MyName" password="somepassword" />  //Authentication works normally 
</credentials>

Проблема, похоже, не применима в вашем случае, но я просто потратил час на то, чтобы понять это, поэтому я решил записать ее здесь.

Ответ 5

Я нахожу это решение........ сначала вам нужно получить hashvalue, используя FormsAuthentication.HashPasswordForStoringInConfigFile( "abc", "SHA1" ) в текстовом поле, запустив вашу программу, а затем укажите это значение в