Олицетворение не работает с Interop.MSClusLib - PullRequest
1 голос
/ 22 августа 2011

У меня есть веб-сервис WCF с разными разделами, которые должны работать под разными пользователями.

Одним из них является кластеризация , реализованная с использованием API Interop.MSClusLib .
Я пытаюсь применить олицетворение с помощью указанный пользователь , но он полностью получает игнорируется .

using (new Impersonator(_impersonation.User, _impersonation.Domain, _impersonation.Password))
{
    var cluster = new Cluster();
    cluster.Open(clusterName);
}

(Подражатель: http://www.codeproject.com/KB/cs/zetaimpersonator.aspx)

WindowsIdentity.GetCurrent () получает пользователя, которого я подражаю, но я все равно получаю:

Доступ запрещен. (Исключение из HRESULT: 0x80070005 (E_ACCESSDENIED)) at MSClusterLib.ClusterClass.Open (String bstrClusterName)

Когда я устанавливаю удостоверение пула приложений для этого пользователя, оно работает, но это не то, чем я хочу заниматься.

Есть ли каким-либо образом , что это может получить исправлено ?
Спасибо!

Ответы [ 3 ]

1 голос
/ 29 августа 2011

Получил объяснение от коллеги:
Существует 2 уровня аутентификации в приложениях: процесс и поток.
Имперсия устанавливает только идентификатор потока, в то время как API-интерфейс кластера, похоже, использует идентификатор процесса.

0 голосов
/ 23 августа 2011

Похоже, это должно работать для меня.Я думаю, вы правы, что проблема заключается в хостинге IIS.Проверьте, имеет ли ваша учетная запись пула приложений «Действовать как часть операционной системы».Эта статья службы поддержки MS о доступе к сетевым файлам из IIS делает то, что вы описываете:

LogonUser также требует, чтобы учетная запись, которая вызывает LogonUser, имела «Act как часть операционной системы»."привилегия в диспетчере пользователей.По умолчанию большинство пользователей, которые IIS олицетворяет во время обработки HTTP-запроса, не имеют права этого пользователя.Тем не менее, для «In Process Applications» существует несколько способов заставить ваш текущий контекст безопасности изменить учетную запись LocalSystem, которая имеет административные учетные данные «Действовать как часть операционной системы» ...

Если это не сработает, я предлагаю провести быструю проверку размещения вашего сервиса за пределами IIS (хост-сервис Visual Studio прост в этом типе тестирования).Убедитесь, что IIS действительно является проблемой, прежде чем проводить больше времени на этом пути ...

0 голосов
/ 22 августа 2011

Причина, по которой вы не получаете сообщение об ошибке при изменении удостоверения AppPool для олицетворенного пользователя, заключается в том, что код выполняется в потоке с этим удостоверением. При размещении WCF в IIS экземпляр службы всегда выполняется под удостоверением AppPool. Олицетворение пользователя не меняет контекст безопасности запущенного потока.

Вполне вероятно, что MSClusLib обращается к "удаленным" ресурсам для выполнения своей работы. Олицетворение Windows не способно (с разрешения) доступа к «удаленным» ресурсам. Вы можете сделать то, что вам нужно, реализовав делегирование вместо олицетворения. Вы должны посмотреть эту статью MSDN , чтобы увидеть, как олицетворение и делегирование работают в WCF.

...