C # cookie-авторизация - PullRequest
4 голосов
/ 20 июня 2011

Я внедряю авторизацию C #, используя файлы cookie jquery для моей страницы. Я устанавливаю / шифрую имя пользователя и пароль в cookie и на своей странице администратора, если я распознаю cookie, то пользователь авторизуется. Если нет, он перенаправляется на страницу входа. Проблема в том, что cookie читается после загрузки страницы, поэтому я могу вручную нажать на страницу администратора, и только через пару секунд он будет перенаправлен. Как предотвратить загрузку страницы администратора для посетителей, у которых еще нет файлов cookie? Какова правильная архитектура для авторизации на основе файлов cookie?

Примечание. Я не использую роли ASP.NET или пользовательские таблицы. Я реализовал свои собственные таблицы для пользователей.

Ответы [ 2 ]

3 голосов
/ 20 июня 2011

Я подозреваю, что вы заново изобретаете колесо.Вам не нужно использовать схему членства поставщика членства и ASP.Net, чтобы воспользоваться преимуществами аутентификации форм.Когда пользователь входит в систему, просто бросьте на него Auth Ticket (cookie), и все готово.Затем вы можете просто выполнить проверку администратора на странице администратора.

Некоторые предложения ниже ...

Редактировать: Первоначально я опубликовал способ хранения ролей в Auth Ticket через UserData, но я думаю, что в этой ситуации это излишне.

Web.config:

<authentication mode="Forms">
  <forms loginUrl="~/Account/LogOn" timeout="30" slidingExpiration="true" />
</authentication>
. . .
<membership>
  <providers>
    <clear />
  </providers>
</membership>

После входа в систему: Когда пользователь отправляет свое имя пользователя и пароль, подтвердите их и проверьте, еслиони администраторы:

if (UserIsValid(username, pwd)) // some validation call
{
    FormsAuthentication.SetAuthCookie(username, true);
}

Admin.aspx: Наконец, быстрый взлом, чтобы ограничить доступ к странице администратора.Когда страница загрузится, убедитесь, что пользователь является / не является администратором:

if (!IsAdmin(User.Identity.Name)) // some admin call
    Response.Redirect("Default.aspx");
1 голос
/ 20 июня 2011

Проблема в том, что вы используете клиентский код для проверки безопасности.Если кто-то полностью отключит JavaScript, он никогда не будет перенаправлен.Переместите чек на код вашей стороны сервера.

...