У меня есть служба WCF, которая использует олицетворение. Я подтвердил, что правильная идентификационная информация используется с помощью следующего метода, который я добавил в свой сервис для отладки.
[OperationBehavior(Impersonation = ImpersonationOption.Required)]
public AuthUser GetUser()
{
AuthUser user = new AuthUser();
user.UserName = WindowsIdentity.GetCurrent().Name;
return user;
}
Без указания [OperationBehavior] я получаю NT AUTHORITY\NETWORK SERVICE
, как я и ожидал. С атрибутом, который я вижу, пользователь вернул, что я ожидаю DOMAIN\DOMAINUSER
.
Служба в настоящее время все еще возвращает ошибку, из-за которой у нее нет доступа для выполнения файловых операций в следующей строке:
FileStream fs = new FileStream(filename, FileMode.Create,FileAccess.Write);
Я проверил, что каталог имеет полный доступ для пользователя домена, проверив группы и членство в Active Directory.
Я определил <identity impersonate="true" />
в web.config службы и определил это в коде на стороне клиента:
client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation
Если уместно, это моя привязка на стороне службы:
<wsHttpBinding>
<binding name="default" maxReceivedMessageSize="200000">
<security mode="Message">
<message clientCredentialType="Windows" />
</security>
</binding>
</wsHttpBinding>
Анонимный доступ включен в IIS, так как я позволяю WCF обрабатывать аутентификацию.