Я пытаюсь загрузить файл с моего ПК на удаленный сервер с помощью формы win и получаю следующую ошибку: Ошибка входа: неизвестное имя пользователя или неверный пароль. На моем компьютере я использую своего пользователя домена и загружаю файл локального пользователя удаленного сервера

Я обнаружил, что мне нужно выдавать себя за своего пользователя, но я до сих пор не понял, как я выдаю себя за NetworkCredential.

Это мой код:

if (tbUsername.Text != string.Empty && tbPassword.Text != string.Empty && userSelectedFilePath != string.Empty)
{
    try
    {
        using (WindowsIdentity.GetCurrent().Impersonate())
        {
            WebClient client = new WebClient();

            NetworkCredential nc = new NetworkCredential("\\\\" + targetServer.Host + "\\" + tbUsername.ToString(), tbPassword.ToString());

            client.Credentials = nc;
            client.UploadFile(targetServer, filepath);
            MessageBox.Show("the file was successfully uploaded", "information", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
    }
}
else
{
    MessageBox.Show("One of the fields is empty", "Fields Empty", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
0
Slava Antonenko 22 Фев 2015 в 14:34
1
Почему вы выдаете себя за то, используя сетевые учетные данные? что уравновешивают друг друга. использовать одно или другое - нет смысла использовать оба! Вы читали документацию для NetworkCredential? вы даете ему имя пользователя и пароль, а не тип элемента управления. у вас есть "tbUsername.ToString()" - это неверно. это должно быть tbUsername.Text... то же самое для tbPassword
 – 
Ahmed ilyas
22 Фев 2015 в 14:52
Вы правы, я пропустил эту строку, но она все равно не работает.
 – 
Slava Antonenko
23 Фев 2015 в 11:44

2 ответа

Сделайте следующие шаги:

Откройте «Панель управления»

Выберите «Административные инструменты»

Откройте «Локальная политика безопасности».

На левой панели перейдите к «Настройки безопасности» => «Локальные политики» => «Параметры безопасности».

На правой панели найдите «Доступ к сети: модель общего доступа и безопасности для локальных учетных записей».

Дважды щелкните по нему, чтобы изменить

Установите его на «Классический — локальные пользователи аутентифицируются как они сами»

0
Jabr 22 Фев 2015 в 14:41
Для этого параметра уже установлено значение «Классический — локальные пользователи аутентифицируются как они сами».
 – 
Slava Antonenko
23 Фев 2015 в 11:49

Я переписал свой раздел кода, и теперь он работает нормально. Теперь это выглядит так:

                    IntPtr admin_token = default(IntPtr);
                    WindowsIdentity wid_current = WindowsIdentity.GetCurrent();
                    WindowsIdentity wid_admin = null;
                    WindowsImpersonationContext wic = null;

                    if ((LogonUser(tbUsername.Text, targetServer.Host, tbPassword.Text, 9, 0, ref admin_token)) != 0 || (LogonUser(tbUsername2.Text, targetServer.Host, tbPassword2.Text, 9, 0, ref admin_token)) != 0)
                    {
                        wid_admin = new WindowsIdentity(admin_token);
                        wic = wid_admin.Impersonate();
                    }
0
Slava Antonenko 24 Фев 2015 в 10:15