Служба WCF олицетворяет одного пользователя, но все же пользовательскую аутентификацию Windows? - PullRequest
0 голосов
/ 09 сентября 2011

Я использую LinqToEntitiesDomainService для подключения к базе данных SQL Server. Это требует проверки подлинности Windows, которая у меня работает.

Я написал веб-сервис, который использует Activator.CreateInstance(...) для запуска исполняемого файла на сервере. Я хотел бы использовать аутентификацию Windows, а также. Однако , мне нужно, чтобы служба имела соответствующие разрешения для запуска исполняемого файла.

Когда я запускаю сервис прямо сейчас, он работает нормально. В моем аккаунте есть нужные роли для аутентификации. У меня также есть богоподобные разрешения на сервере, что позволяет мне работать с командой Activator.CreateInstance(...).

Хотя другие пользователи с соответствующими ролями могут проходить проверку подлинности, их учетная запись не имеет разрешений на сервере, а также не должна.

Существует ли какой-либо (желательно простой) способ запуска службы от имени одного пользователя, но все ли аутентификации выполняются с помощью аутентификации Windows? Также было бы лучше, если бы я мог сделать все это только в одном пуле приложений ...

Спасибо!

1 Ответ

2 голосов
/ 09 сентября 2011

Да, можете, посмотрите на эту статью .Здесь показаны некоторые методы для олицетворения пользователей.

using (WindowsImpersonationContext impersonationContext =
                                 ((WindowsIdentity)User.Identity).Impersonate())
{
    // do something as current user
}

Или в WCF вы также можете определить это в десятичном выражении.

public class HelloService : IHelloService
{
    [OperationBehavior(Impersonation = ImpersonationOption.Required)]
    public string Hello(string message)
    {
        return "hello";
    }
}

Обратите внимание, что эти два метода олицетворяют клиента (абонента).

Чтобы явно выдать себя за другого пользователя, вам понадобится P / Invoke.Здесь есть проект , который завершает все это для вас довольно аккуратно.Затем вы можете сделать это:

using (new Impersonator("myUsername", "myDomainname", "myPassword"))
{
   // do something as myUsername
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...