Нам трудно понять, как работают эти объекты учетных данных. На самом деле, они могут не работать так, как мы ожидали. Вот объяснение текущей проблемы.
У нас есть 2 сервера, которые должны общаться друг с другом через веб-сервисы. Первый (назовем его Server01
) имеет службу Windows, выполняющую роль учетной записи NetworkService. Другой Server02
имеет ReportingServices, работающие с IIS 6.0. Служба Windows на Server01
пытается использовать веб-службу Server02
ReportingServices для создания отчетов и отправки их по электронной почте.
Итак, вот что мы попробовали до сих пор.
Установка учетных данных во время выполнения ( Это прекрасно работает ):
rs.Credentials = new NetworkCredentials("user", "pass", "domain");
Теперь, если бы мы могли использовать универсального пользователя, все было бы хорошо, однако ... нам не разрешено. Итак, мы пытаемся использовать DefaultCredetials или DefaultNetworkCredentials и передать их веб-службе RS:
rs.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials
Или:
rs.Credentials = System.Net.CredentialCache.DefaultCredentials
В любом случае не сработает. Мы всегда получаем 401 Unauthrorized от IIS. Теперь мы знаем, что если мы хотим предоставить доступ к ресурсу, зарегистрированному как NetworkService, нам нужно предоставить его DOMAIN\MachineName$
(http://msdn.microsoft.com/en-us/library/ms998320.aspx):
).
Предоставление доступа к удаленному серверу SQL
Если вы обращаетесь к базе данных на другом сервере в том же домене (или в доверенном домене), учетные данные сети учетной записи сетевой службы используются для аутентификации в базе данных. Учетные данные учетной записи сетевой службы имеют вид DomainName \ AspNetServer $, где DomainName - это домен сервера ASP.NET, а AspNetServer - имя вашего веб-сервера.
Например, если ваше приложение ASP.NET работает на сервере с именем SVR1 в домене CONTOSO, SQL Server видит запрос доступа к базе данных из CONTOSO \ SVR1 $.
Мы предполагали, что предоставление доступа таким же образом с IIS будет работать. Однако это не так. Или, по крайней мере, что-то настроено неправильно для правильной аутентификации.
Итак, вот несколько вопросов:
Мы где-то читали о «олицетворении пользователей», нужно ли где-то устанавливать это в Windows Service ?
Можно ли предоставить доступ к встроенной учетной записи NetworkService удаленному серверу IIS?
Спасибо за чтение!