powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Смешанный режим аутентификации: толи IIS глючит толи руки кривые
4 сообщений из 4, страница 1 из 1
Смешанный режим аутентификации: толи IIS глючит толи руки кривые
    #38606295
10brd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
В Веб-приложении реализовал смешанную аутентификацию в соответствии со статьей ссылка .
В режиме отладки все работает на ура, а вот в IIS7.5 (Windows 7) что-то не хочет. Реализация проверенная, т.к. в предыдущих двух приложениях делал что-то подобное, только вот на IIS 6 (w2k3).
По порядку:
Настройки IIS 7.5:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll – разрешено.
Оба приложения используют пул: ASP.NET v4.0 (режим управляемого конвейера - встроенный)
Два Веб-приложения:
1. Login – Windows аутентификация
2. Todolist – аутентификация на основе форм
Настройки приложений:
Login - Global.asax (фрагмент):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
        string userData = "Domain Users";
        string userName = string.Empty;
        //HttpContext _context = HttpContext.Current;
        //System.Security.Principal.IPrincipal _princ = HttpContext.Current.User;
        if (HttpContext.Current.User != null)
            userName = HttpContext.Current.User.Identity.Name;

        if (userName.StartsWith(@"Имя_домена\"))
            userName = userName.Split('\\').GetValue(1).ToString();

            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
                1,
                userName,
                DateTime.Now,
                DateTime.Now.AddMinutes(30),
                false,
                userData,
                FormsAuthentication.FormsCookiePath);
            string encTicket = FormsAuthentication.Encrypt(ticket);

            Response.Cookies.Add(new HttpCookie("OU", encTicket));
            Response.Redirect(ConfigurationManager.AppSettings.Get("RedirectUrl"));        
            
        
    }


Login - Web.config (фрагмент):
Код: xml
1.
2.
3.
4.
<authentication mode="Windows"/>
<machineKey validationKey="357356792679345184568256876535689056434617489465" 
                decryptionKey="357356792679345184568256876535689056434617489465" 
                validation="SHA1"/>


Todolist - Global.asax (фрагмент):
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
void Application_AuthenticateRequest(Object sender, EventArgs e)
    {
        bool cookieExists = false;
        HttpCookie authCookie = null;
        authCookie = Request.Cookies.Get(FormsAuthentication.FormsCookieName);
        if (authCookie != null)
            cookieExists = true;

        if (!cookieExists)
            return;
        
        FormsAuthenticationTicket winAuthTicket = 
            FormsAuthentication.Decrypt(authCookie.Value);
        
        string[] roles = winAuthTicket.UserData.Split(';');        
        FormsIdentity formsId = new FormsIdentity(winAuthTicket);
        GenericPrincipal princ = new GenericPrincipal(formsId, roles);
        HttpContext.Current.User = princ;

        User u = ToDoList.Lib.User.GetUser(HttpContext.Current.User.Identity.Name);
        if (u == null)
        {
            FormsAuthentication.SignOut();
            FormsAuthentication.RedirectToLoginPage();            
        }
    }


Todolist - Web.config (фрагмент):
Код: xml
1.
2.
3.
4.
5.
6.
7.
<authentication mode="Forms">
      <forms name="OU" loginUrl="Default.aspx" protection="All" timeout="30" path="/" requireSSL="false" slidingExpiration="true">
      </forms>
		</authentication>
    <machineKey validationKey="357356792679345184568256876535689056434617489465" 
                decryptionKey="357356792679345184568256876535689056434617489465" 
                validation="SHA1"/>



Есть предположение, что сама реализация работает корректно, только вот приложение Login возвращает пустое значение, хотя если с него редирект на исходную страницу не делать, а вывести значение на странице самого приложения Login, например, через
Код: c#
1.
Response.Write(userName)

, то оно возвращает непустое значение, только вот странное какое-то. Вместо имени УЗ выводит следующее:
«Имя УЗНазвание домена\Имя УЗ», а должно быть «Имя УЗ». Но даже с неправильным форматом значения, как мне кажется, в исходном приложении Todolist должно выводиться какое-нибудь значение.

Подскажите, пожалуйста, куда еще можно покапать?
Заранее спасибо.
...
Рейтинг: 0 / 0
Смешанный режим аутентификации: толи IIS глючит толи руки кривые
    #38606604
10brd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В продолжение темы выяснил, что в 4-ом Framework имеется проблема в аутентификации. Т.е. она не определяется, хоть и установлена опция в Web.config и IIS 7.5. Во 2-ом Framework таких проблем нет.
Может быть еще есть какой-нибудь нюанс, который, возможно, я упустил? Неужели никто не использовал Windows аутентификацию в 4-ом Framework?
...
Рейтинг: 0 / 0
Смешанный режим аутентификации: толи IIS глючит толи руки кривые
    #38606617
10brd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался!

Т.к. приложение login компилировалось с использованием 2-го Framework, то и исполняться в IIS оно должно также с использованием указанного Framework - поменял пул приложения и указал 2-ой Framework.
В 4-ом Framework аутентификация работает только в классическом режиме управляемого конвейера.
Для моего примера соблюдение указанных условий достаточно чтобы все заработало.
Для справки: если же Windows аутентификация используется для приложения под управлением 4-ого Framework, то в web.config помимо параметра
Код: xml
1.
<authentication mode="Windows"/>

, нужно добавить также
Код: xml
1.
<identity impersonate="true"/>

после этого приложение определит залогиневшего пользователя.
Всем спасибо.
...
Рейтинг: 0 / 0
Смешанный режим аутентификации: толи IIS глючит толи руки кривые
    #38606637
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10brd,

с тебя пиво за помощь
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Смешанный режим аутентификации: толи IIS глючит толи руки кривые
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]