Имею следующую архитектуру.
На одном и том же IIS 6.0 (запущен от доменной учетки, входящей в локальную группу IIS_WPG) развернуты
1. Тонкий клиент (asp.net)
2. WCF сервис который хостится на этом IIS.
На другой машине крутится MS SQL Server 2000 (работает от локальной учетной записи).
В итоге получил половинчатый результат — если с клиента подключатся к SQL серверу — то подключение идет под доменной учеткой пользователя.
А вот если с клиента дернуть функцию у WCF сервиса, которая тоже осуществляет такое же подключение — то получаю Login failed, т.к. подключение идет под учеткой IIS-а.
Имперсонация включена и на клиенте и на WCF сервисе (проверял через ServiceSecurityContext.Current.WindowsIdentity.Name).
Почему так происходит? Надо, чтобы пользователь проходил со своей учеткой по всему пути ASP.NET-клиент->WCF сервис->SQL Server
Здравствуйте, hstas, Вы писали:
H>Имею следующую архитектуру. H>На одном и том же IIS 6.0 (запущен от доменной учетки, входящей в локальную группу IIS_WPG) развернуты H>1. Тонкий клиент (asp.net) H>2. WCF сервис который хостится на этом IIS.
H>На другой машине крутится MS SQL Server 2000 (работает от локальной учетной записи). H>делегирование настраивал по вот этому мануалу How to use Kerberos authentication in SQL Server
H>В итоге получил половинчатый результат — если с клиента подключатся к SQL серверу — то подключение идет под доменной учеткой пользователя.
Брацзер при этом запущен на том же компьютере, что и сервис?
Если нет — попробуйте запустить его с того же компьютера, будет ли отличаться результат? То есть, чтобы браузер, asp.net и WCF сервис были на одной машине, а SQL — на другой.
H>А вот если с клиента дернуть функцию у WCF сервиса, которая тоже осуществляет такое же подключение — то получаю Login failed, т.к. подключение идет под учеткой IIS-а.
H>Имперсонация включена и на клиенте и на WCF сервисе (проверял через ServiceSecurityContext.Current.WindowsIdentity.Name).
Как именно она включена?
Здравствуйте, vmpire, Вы писали:
V>Здравствуйте, hstas, Вы писали:
H>>Имею следующую архитектуру. H>>На одном и том же IIS 6.0 (запущен от доменной учетки, входящей в локальную группу IIS_WPG) развернуты H>>1. Тонкий клиент (asp.net) H>>2. WCF сервис который хостится на этом IIS.
H>>На другой машине крутится MS SQL Server 2000 (работает от локальной учетной записи). H>>делегирование настраивал по вот этому мануалу How to use Kerberos authentication in SQL Server
H>>В итоге получил половинчатый результат — если с клиента подключатся к SQL серверу — то подключение идет под доменной учеткой пользователя. V>Брацзер при этом запущен на том же компьютере, что и сервис? V>Если нет — попробуйте запустить его с того же компьютера, будет ли отличаться результат? То есть, чтобы браузер, asp.net и WCF сервис были на одной машине, а SQL — на другой.
H>>А вот если с клиента дернуть функцию у WCF сервиса, которая тоже осуществляет такое же подключение — то получаю Login failed, т.к. подключение идет под учеткой IIS-а.
H>>Имперсонация включена и на клиенте и на WCF сервисе (проверял через ServiceSecurityContext.Current.WindowsIdentity.Name). V>Как именно она включена?
Результат одинаков, и в случае если браузер запущен на той же машине где крутится IIS, и в случае если на другой тачке.
Здравствуйте, hstas, Вы писали:
H>Здравствуйте, vmpire, Вы писали:
H>>>Имею следующую архитектуру. H>>>На одном и том же IIS 6.0 (запущен от доменной учетки, входящей в локальную группу IIS_WPG) развернуты H>>>1. Тонкий клиент (asp.net) H>>>2. WCF сервис который хостится на этом IIS.
H>>>На другой машине крутится MS SQL Server 2000 (работает от локальной учетной записи).
H>>>А вот если с клиента дернуть функцию у WCF сервиса, которая тоже осуществляет такое же подключение — то получаю Login failed, т.к. подключение идет под учеткой IIS-а.
H>Результат одинаков, и в случае если браузер запущен на той же машине где крутится IIS, и в случае если на другой тачке.
Значит, дело не в настройках Kerberos
H>Имперсонация включена через web.config
H> <identity impersonate="true"/> H> <authentication mode="Windows"/> H> <authorization> H> <deny users="?"/> H> <allow users="*"/> H> </authorization>
Мне кажется, это невалидная настройка. <identity impersonate="true"/> — это имперсонация в фиксированного пользователя, который должен быть указан. Попробуйте её убрать.
H>Соответственно, в настройках виртуальных каталогов, отключен анонимный доступ, и включена Виндовс аутентификация.
Это, вроде, правильно
Проверьте следующее:
1. Логи IIS, каталога с asp.net. Там должно быть обращение от нужного юзера (скорее всего, оно так и есть, просто, на всякий случай).
2. Логи IIS, каталога с WCF. Там тоже должно быть обращение от нужного юзера.
3. Проверьте, что в настройках connection pools галка Impersonate тоже выключена