Копирование файлов по сети (требование аутентификации)

Там некоторый путь состоит в том, чтобы пройти проверку подлинности как локальное (не сеть) пользователь для копирования файлов по сети в .NET?

net use не опция, и я, может казаться, не заставляю LogonUser работать.

Какие-либо идеи?


[Редактирование] Здесь является некоторым кодом:

public class UserImpersonator : IDisposable
{
    private WindowsImpersonationContext _impersonationContext;
    private IntPtr _userHandle = IntPtr.Zero;

    [DllImport("advapi32.dll", SetLastError = true)]
    private static extern bool LogonUser(
        string lpszUsername,
        string lpszDomain,
        string lpszPassword,
        int dwLogonType,
        int dwLogonProvider,
        out IntPtr phToken
        );

    [DllImport("kernel32.dll", SetLastError = true)]
    private static extern bool CloseHandle(IntPtr hHandle);

    public UserImpersonator(string username, string password)
    {
        LogonUser(username, "", password, (int)LogonType.LOGON32_LOGON_NETWORK,
                  (int)LogonProvider.LOGON32_PROVIDER_DEFAULT, out _userHandle);
        _impersonationContext = WindowsIdentity.Impersonate(_userHandle);
    }

    public void Dispose()
    {
        CloseHandle(_userHandle);
        _impersonationContext.Undo();
    }

    private enum LogonType : int
    {
        LOGON32_LOGON_INTERACTIVE = 2,
        LOGON32_LOGON_NETWORK = 3,
        LOGON32_LOGON_BATCH = 4,
        LOGON32_LOGON_SERVICE = 5,
        LOGON32_LOGON_UNLOCK = 7,
        LOGON32_LOGON_NETWORK_CLEARTEXT = 8,
        LOGON32_LOGON_NEW_CREDENTIALS = 9,
    }

    private enum LogonProvider
    {
        LOGON32_PROVIDER_DEFAULT = 0,
    }
}

Когда я переношусь File.Copy операция в using(new UserImpersonator(username, password)), Я добираюсь:

Система. IO.IOException: отказ Входа в систему: имя неизвестного пользователя или неверный пароль.

Если, однако, я сначала пытаюсь соединиться с долей в проводнике (ввод информации об аутентификации, когда это просит его), File.Copy работы. Кажется, что вышеупомянутый код не делает ничего вообще.

7
задан Mat 20 August 2011 в 08:59
поделиться

3 ответа

Вы можете использовать WNetUseConnection с вызовами p /.

См. Эту ветку:

Доступ к общему файлу (UNC) из удаленного ненадежного домена с учетными данными

4
ответ дан 7 December 2019 в 12:17
поделиться

Могу я направить вас к моему ответу, который я поместил здесь ? Он должен работать для ваших нужд.

1
ответ дан 7 December 2019 в 12:17
поделиться

Вам действительно нужно войти в систему либо в локальную учетную запись, которая является членом группы на контроллере домена, либо просто войти непосредственно в учетную запись DC. Однако без дополнительной информации я не уверен, с чем у вас проблемы. Не могли бы вы опубликовать код?

редактировать

Хорошо, я вижу две проблемы.

Основная проблема заключается в том, что вы передаете пустую строку для параметра домена LogonUser. Попробуйте передать имя локальной машины или сетевого контроллера домена.

Побочная проблема заключается в том, что вам нужно входить в систему, используя пакетный или интерактивный режим, а не по сети. Сетевой вход дает вам токен олицетворения, а не первичный вход в систему, что может помешать вам получить доступ к сетевым ресурсам, если не включено делегирование.

Кроме того, как только вы это заработаете, вы захотите полностью удалить IntPtr и заменить его SafeHandle.

0
ответ дан 7 December 2019 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: