Управление службой на удаленном сервере из IIS
Обратите внимание: на каждом шаге, который я описываю ниже, я захожу под одной и той же учетной записью пользователя домена.
У меня есть веб-приложение, которое управляет службой на удаленной машине (через ServiceController). Когда я подключаюсь к веб-сайту удаленно и пытаюсь управлять службой, я получаю исключение InvalidOperationException: доступ запрещен.
Я знаю, что это МОЖЕТ работать, потому что, когда я подключаюсь к веб-сайту с веб-сервера (удаленный рабочий стол, войдите в систему как пользователь моего домена, а затем откройте веб-страницу), он работает как положено.
Я настроил IIS и ASP.NET, чтобы требовать проверки подлинности Windows и олицетворения. Я регистрирую участника текущего потока, когда это терпит неудачу, и я вижу, что поток работает под моей идентификацией, подключаюсь ли я удаленно или с самого сервера.
Я пытался заставить IIS использовать аутентификацию Kerberos, NTLM и то и другое одновременно; независимо от того, сообщает ли мой руководитель свой AuthenticationType как "Negotiate" или "NTLM", не имеет значения. Ни один из них не работает, когда я подключаюсь удаленно (с моей локальной машины)
Еще одна странная вещь об этом заключается в том, что, если я отлаживаю с моей локальной машины / подключаюсь к удаленному серверу, это работает каждый раз! Но я НЕ отлаживаю, каждый раз это терпит неудачу!
Что, черт возьми, здесь может происходить?
2 ответа
Ваш сценарий - это делегирование, а не подражание. Делегации трудно достичь, и это зависит от многих вещей, которые сделаны правильно.
Начнем с проверки подлинности и устранения неполадок делегирования Kerberos.
Блог Дэвида Вана - очень полезный ресурс по этим вопросам.
"ДРУГАЯ странная вещь об этом заключается в том, что если я отлаживаю с моей локальной машины / подключаюсь к удаленному серверу, он работает каждый раз! Но я НЕ отлаживаю, он каждый раз терпит неудачу!"
Это явный признак того, что у вас есть проблемы с разрешениями. Когда вы запускаете в отладчике, вы работаете как вошедший в систему пользователь, когда вы не отлаживаете, он работает так, как настроено для использования IIS (NETWORK SERVICE по умолчанию). Попробуйте установить (временно!) Включить анонимный доступ, используя учетную запись домена в качестве пользователя, и посмотрите, работает ли это. Если это так, то это означает, что ваш IIS не настроен должным образом для олицетворения (и, вероятно, он работает как NETWORK SERVICE).
Разрешения в IIS могут быть немного точными для правильной настройки... Удачи!
P / S: Это больше похоже на вопрос сетевого администрирования, чем на вопрос программирования (см. https://stackru.com/questions/321618/stackru-is-for-programming-questions-here-are-some-better-forums-for-your)