Проверка подлинности Windows для пользовательской проверки подлинности при работе с профилем

Я использую проверку подлинности Windows с профилем и хотел перейти к пользовательской проверке подлинности.
Мой вопрос: как я могу указать, что мой пользователь аутентифицирован, и как установить Profile.UserName.
Я знаю, что Profile.UserName доступен только для чтения.

В своем Web.Config я изменяю authentication mode="None" и настраиваю IIS для включения анонимного доступа.
В global.asax я проверяю, существует ли файл cookie для пользователя. Если нет, пользователь перенаправляется на страницу входа. Когда он отправляет, я создаю файл cookie, и в этот момент я устанавливаю информацию о профиле.

Если кто-то может просто дать мне ссылку об этом, я был бы очень признателен.


person Jean-Francois    schedule 29.09.2010    source источник
comment
Возможно, это не то, что вы ищете, но есть ли причина, по которой вы не используете проверку подлинности с помощью форм? Он делает все, что вы описали до сих пор, и экономит время по сравнению с настройкой.   -  person Justin C    schedule 29.09.2010
comment
Я попробую аутентификацию с помощью форм и дам вам знать.   -  person Jean-Francois    schedule 29.09.2010


Ответы (1)


Похоже, что проверка подлинности с помощью форм может справиться с тем, что вам нужно. Добавьте следующую строку в корневой файл web.config.

<authentication mode="Forms">
  <forms name="XXXXX.ASPXAUTH" timeout="60" loginUrl="~/login.aspx" protection="All" path="/"></forms>
</authentication>

Замените XXX на то, что вы хотите назвать своим файлом cookie. Также переименуйте login.aspx в то, что вы назвали своей страницей входа. Этот код перенаправит любого, кто не прошел аутентификацию, на страницу входа.

Затем в вашей логике входа используйте что-то вроде следующего кода С#

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, txtUsername.Text,
     DateTime.Now, DateTime.Now.AddMinutes(60), true, reader["user_level"] + "",
     FormsAuthentication.FormsCookiePath);
string hash = FormsAuthentication.Encrypt(ticket);
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
if (ticket.IsPersistent) cookie.Expires = ticket.Expiration;
Response.Cookies.Add(cookie);

С помощью этого кода вы захотите отправить уровень пользователя вошедшего в систему человека (например, администратора, пользователя и т. д.), где у меня есть «читатель [...»

Последнее, что вам нужно сделать, это настроить каждый защищенный каталог с собственным файлом web.config, в котором указаны разрешенные и запрещенные роли пользователей. Имена, которые вы используете для ролей в файле web.config, должны соответствовать значениям, отправленным в FormsAuthenticationTicket, и все будет готово.

person Justin C    schedule 29.09.2010
comment
Спасибо, Джастин, отличная работа. Я могу делать все, что мне нужно, с помощью этого метода. - person Jean-Francois; 29.09.2010