Пользовательская аутентификация WCF: олицетворение учетной записи Windows на время запроса - PullRequest
0 голосов
/ 03 марта 2011

для клиента, мне нужно реализовать следующий сценарий:

  • Аккаунты пользователей хранятся в базе данных. Список содержит учетные записи, прошедшие проверку подлинности Windows, и учетные записи, прошедшие проверку подлинности SQL Server. Пароли не хранятся в базе данных (для учетных записей, прошедших проверку подлинности Windows, для проверки учетных данных используется система windows, учетные записи, прошедшие проверку подлинности SQL, проверяются сервером SQL)
  • Создана служба WCF, в которой пользователи проходят проверку подлинности с использованием настраиваемого поставщика проверки подлинности, чтобы иметь возможность обрабатывать учетные записи Windows и SQL. Поэтому в службе доступны как имя пользователя (домен \ имя пользователя или просто имя пользователя), так и пароль.
  • Уже существует специальный API, который содержит класс, который инкапсулирует обработку соединения с сервером базы данных. В случае учетной записи Windows, я предоставляю строку подключения к классу, который использует встроенную защиту. В случае учетной записи SQL я строю строку подключения, содержащую имя пользователя и пароль учетной записи SQL. Было бы удобно создать объект класса в начале запроса и избавиться от него, когда запрос закончится.
  • Чтобы сценарий учетной записи Windows работал, я хочу выдать себя за учетную запись Windows на время запроса.

То, что я ищу, это способ реализации олицетворения в одном месте вместо каждого метода обслуживания в отдельности.

Как я могу реализовать это в сервисе?

Спасибо за вашу помощь,

Markus

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Возможно, этот пример поможет вам в пути: взяты из здесь

public class HelloService : IHelloService
{
    [OperationBehavior(Impersonation = ImpersonationOption.Required)]
    public string Hello(string message)
    {
        WindowsIdentity callerWindowsIdentity = ServiceSecurityContext.Current.WindowsIdentity;
        if (callerWindowsIdentity == null)
        {
            throw new InvalidOperationException
             ("The caller cannot be mapped to a Windows identity.");
        }
        using (callerWindowsIdentity.Impersonate())
        {
            EndpointAddress backendServiceAddress = new EndpointAddress("http://localhost:8000/ChannelApp");
            // Any binding that performs Windows authentication of the client can be used.
            ChannelFactory<IHelloService> channelFactory = new ChannelFactory<IHelloService>(new NetTcpBinding(), backendServiceAddress);
            IHelloService channel = channelFactory.CreateChannel();
            return channel.Hello(message);
        }
    }
}
0 голосов
/ 19 ноября 2015

На самом деле эта ссылка дает ответ: ServiceAuthorizationBehavior.ImpersonateCallerForAllOperations

Фрагмент:

Для получения подробной информации, в том числе, как олицетворениевыполняется при использовании Allowed вместе со свойством ServiceAuthorizationBehavior.ImpersonateCallerForAllOperations, см. Делегирование и олицетворение с WCF и Как: олицетворять клиента в службе.

Ниже приведена буквенная ссылка.

https://msdn.microsoft.com/en-us/library/system.servicemodel.operationbehaviorattribute.impersonation(v=vs.110).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...