Проблема с проверкой подлинности ASP.NET - PullRequest
3 голосов
/ 03 июня 2010

У меня проблема с нашей процедурой входа.

Некоторые клиенты жалуются, что не могут войти. Я вижу в наших журналах, что их вход в систему успешен, и что они перенаправлены со страницы входа в личный кабинет. Но там почему-то логин не обнаружен, и они возвращаются на страницу входа.

Я попросил клиентов проверить, поддерживаются ли файлы cookie (http://www.html -kit.com / tools / cookietester / ), но проблема остается, даже если этот тест возвращает значение true.

Вот как я реализовал процедуру входа (просто):

protected void Login(string email, string password)
{

FormsAuthentication.SignOut();


Guid clientId = /* Validate login by checking email and password, if fails display error otherwise get client id */


FormsAuthentication.SetAuthCookie(clientId.ToString(), true);

HttpContext.Current.Response.Redirect("~/Members.aspx");


}

На странице участника я проверяю аутентификацию с помощью функции Page_Load:

public static void IsAuthenticated()
{
 if (!HttpContext.Current.User.Identity.IsAuthenticated)
 {
         HttpContext.Current.Response.Redirect("~/Login.aspx", true);
 }
}

Может быть, я неправильно использую FormsAuthentication?

Я спрашивал об этом раньше, но до сих пор не смог понять это, я был бы признателен за любую помощь.

Из моего Web.Config:

<system.web>
    <compilation debug="false">
      <assemblies>
       ...
      </assemblies>
    </compilation>
    <authentication mode="Forms"/>
    <sessionState mode="InProc" cookieless="false" timeout="180"/>
    <customErrors mode="On"/>
    <httpHandlers>
    ...
    </httpHandlers>
    <httpModules>
    ...
    </httpModules>   </system.web>

Ответы [ 3 ]

2 голосов
/ 03 июня 2010

публичная статическая пустота IsAuthenticated () { if (! HttpContext.Current.User.Identity.IsAuthenticated) { HttpContext.Current.Response.Redirect ("~ / Login.aspx", true); } }

не требуется при использовании проверки подлинности с помощью форм.

Когда вы указываете аутентификацию форм в файле web.config (в котором вы также указываете страницу входа)

<authentication mode="Forms">
  <forms loginUrl="/Authorization/Login" timeout="60" />
</authentication>

и вы отказываете всем неаутентифицированным пользователям в доступе

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

вам не нужно проверять аутентификацию пользователя самостоятельно, об этом позаботится фреймворк.

Я бы разместил код FormsAuthentication.SignOut(); за ссылкой 'logout'

1 голос
/ 03 июня 2010

Обычно вы используете FormsAuthentication.Authenticate вместе с каким-либо провайдером членства, но это должно работать, и это действительно работает на моем компьютере.

Вы удаляете FormsAuthentication из своих зарегистрированных модулей HTTP? Как правило, это находится на веб-странице машины.

<configuration>
  <system.web>
    <httpModules>
      <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule"  />
    </httpModules>
  </system.web>
</configuration>

Если вы поместите <clear /> в тот же раздел вашего собственного web.config, вы фактически удаляете этот модуль.

Мой протестированный Web.config довольно чистый, настроен только <authentication mode="Forms"/>.

1 голос
/ 03 июня 2010

Разделите вызов SignOut () и SetAuthCookie () в разных методах. Вы можете позвонить FormsAuthentication.SignOut();, когда страница входа в систему загружается в первый раз - просто не звоните SignOut () на странице входа. И звоните FormsAuthentication.SetAuthCookie(clientId.ToString(), true); после успешной аутентификации.

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