У меня есть служба WCF, размещенная в IIS 7 в пуле приложений по умолчанию в интегрированном режиме с отключенным анонимным доступом и включенной аутентификацией Windows.
Я добавил следующий атрибут в реализацию метода для моего интерфейса.
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
Если я не предоставляю учетные данные сети при вызове моей службы, я получаю ожидаемое поведение в следующем:
ServiceSecurityContext.Current.WindowsIdentity.Name = myDomain \ myUser
ServiceSecurityContext.Current.PrimaryIdentity.Name = myDomain \ myUser
Thread.CurrentPrincipal.Identity.Name = myDomain \ myUser
Я могу подключиться к базе данных в удаленной системе, используя SSPI и аутентификацию myDomain \ myUser.
WindowsIdentity.GetCurrent (). Name = myDomain \ myUser
Я могу использовать Thread.CurrentPrincipal.IsInRole (), чтобы проверить, что пользователь в роли.
Я могу использовать WindowsIdentity.GetCurrent (). Groups для получения списка групп для пользователя.
Но если я предоставлю сетевые учетные данные, используя следующее:
var networkCredential = new NetworkCredential(user, pwd, dom);
base.ClientCredentials.Windows.ClientCredential = networkCredential;
base.ClientCredentials.Windows.AllowNtlm = true;
base.ClientCredentials.Windows.AllowedImpersonationLevel
= System.Security.Principal.TokenImpersonationLevel.Delegation;
Тогда все вышеперечисленное одинаково, за исключением соединения с базой данных, и две из перечисленных групп различны. Соединение с базой данных выполняется с использованием учетной записи NT Authority \ Anonymous. Использование NetworkCredentials помещает пользователя в группу NT Authority \ Network, а не в NT Authority \ Interactive, и дополнительно удаляется ЛОКАЛЬНАЯ группа.
Моя цель - установить соединение с базой данных с использованием учетных данных, переданных NetworkCredential, и мы будем благодарны за любые советы.
Держатель Шейна