Служба WCF, использующая WindowsIdentity? Права доступа к каталогу - PullRequest
0 голосов
/ 06 октября 2011

У меня есть служба 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 обрабатывать аутентификацию.

1 Ответ

1 голос
/ 07 октября 2011

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

Здесь приведена ссылка на сведения MSDN http://msdn.microsoft.com/en-us/library/ff649252.aspx, и этот пост может помочь вам Олицетворениеи делегирование в ASP.NET

...