Почему Windows / Integrated Authentication в IIS не передает учетные данные пользователя SSRS и SQL?
вопрос:
В ASP.NET 4.0, я использую сервер SSRS 2005 ReportService2005.asmx
веб-сервис для получения списка отчетов. Также в .NET я использую Entity Framework для связи с моей базой данных MS-SQL 2005. Когда я использую сервер разработки Visual Studio в качестве своего веб-сервера, вызовы SSRS и SQL работают нормально. Но когда я переключаюсь на IIS 5.1, как SSRS, так и код сущности вызывают ошибки. Я использую только Windows / встроенная проверка подлинности в IIS.
ошибки:
Для SSRS, I get The request failed with HTTP status 401: Unauthorized.
для Entity Framework я получаю Login failed for user ''. The user is not associated with a trusted SQL Server connection.
Попытки Решения:
в сети.Конфиг я добавил <identity impersonate="true" />
и что исправлены ошибки Entity Framework, но не ошибки SSRS. Я расширил identity
ссылка для включения мой имя пользователя и пароль, и это исправило все ошибки.
вопрос:
Почему указание моего имени пользователя и пароля исправляет ошибки, и почему SQL говорит, что я не указываю имя пользователя (''
)? Я думал, что проверка подлинности Windows автоматически олицетворение текущего пользователя. Как я могу исправить это без жесткого кодирования учетной записи "службы" в интернете.конфиг?
2 ответов
Windows или встроенная аутентификация означает, что пользователь идентифицируется с помощью учетных данных windows (или токена), но это не означает, что запрос выполняется под этим пользователем. ASP.NET во время выполнения запрос будет выполняться под идентификатором рабочего процесса (пула приложений), Если вы не настроите его для олицетворения другого идентификатора.
таким образом, когда вы получаете доступ к сайту с помощью сервера разработки, сервер работает под вашим удостоверением, и поэтому доступ к SSRS и Sql Server выполняется под ваша личность и она работает.
когда вы загрузили свой сайт под IIS, ASP.NET запрос будет выполняться под любым идентификатором, настроенным для пула приложений. Обычно этот идентификатор является локальным пользователем, поэтому доступ к сетевым ресурсам, таким как SSRS или Sql Server, будет запрещен. Добавление <identity impersonate="true" username="your name" ../>
, ASP.NET будет запускать запросы под вашим удостоверением, и это должно работать как для SSRS, так и для Sql Server.
любопытный случай здесь <identity impersonate="true" />
- при этой настройке, ASP.NET будет олицетворение удостоверения windows, прошедшего проверку подлинности. Однако, чтобы это работало правильно, необходимо настроить IIS и ASP.NET об интегрированной аутентификации и отказе в анонимном доступе (в ASP.NET а также IIS). Невыполнение этого требования может привести к не проверки подлинности текущего пользователя идентификатор и запрос будет работать под личность анонимного пользователя (настраивается в IIS). Если вы отметили встроенную проверку подлинности в IIS, но не в ASP.NET тогда идентичность не будет передана ASP.NET просьба. Вам нужно проверить свою среду, чтобы увидеть, какой точный сценарий вы столкнулись, но конечный результат был ваш ASP.NET запрос выполнялся под учетными данными, имеющими доступ к SQL Server, но не к SSRS.
Вам также необходимо знать о проблеме "двойного прыжка" - это означает, что ваши учетные данные могут использоваться только дважды.
Если вы обращаетесь к веб-сайту с помощью проверки подлинности Windows и олицетворения, этот веб-сайт может вызвать другую службу, как вы. Если эта другая служба является другим веб-сайтом (т. е. службами Reporting Services), который, в свою очередь, вызывает другую службу (например, базу данных), она не может передать ваши учетные данные снова. Это означает, что база данных выдаст ошибку, если она ожидает учетные данные пользователя.