Доступ к файлу на сетевом диске

Фон: у Меня есть приложение, которое должно читать из файлов на сетевом диске (Z:)

Это работает отлично в моем офисном домене, однако он не работает над сайтом (в другом домене). Насколько я могу сказать пользователям домена, и сетевые диски установлены таким же образом, однако у меня нет доступа к пользователям и т.д. в клиентском домене.

Когда я не мог получить доступ к сетевому диску, я полагал, что мне был нужен маркер для пользователя. Это - то, как я исполняю роль пользователя:

[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);

...

const string userName = "USER";
const string pass = "PASS";
const string domainName = "VALIDDOMAIN.local"  //tried with valid domain name and with null, same result
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_LOGON_INTERACTIVE = 2;

IntPtr tokenHandle = new IntPtr(0);

bool returnValue = LogonUser(userName, domainName, pass,
            LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT,
            ref tokenHandle);

if (!returnValue)
    throw new Exception("Logon failed.");

WindowsImpersonationContext impersonatedUser = null;
try
{
    WindowsIdentity wid = new WindowsIdentity(tokenHandle);
    impersonatedUser = wid.Impersonate();

}
finally
{
    if (impersonatedUser != null) impersonatedUser.Undo();
}

Теперь вот интересная/странная часть. В моей сети приложение может уже получить доступ к сетевому диску, и если я попытаюсь исполнить роль активного пользователя (точно тот же пользователь, то включая тот же домен) это не сможет получить доступ к сетевому диску.

Это оставляет меня беспомощным с тех пор теперь, я понятия не имею, какие работы и что не делает, и главное, это будет работать над сайтом?

Что я пропускаю?

Править: Я забыл писать это, первоначально задавая вопрос: Я попытался ввести допустимое доменное имя, и оно не работало, так после этого я пытался ввести пустой указатель для получения того же имени пользователя, как я буду без этого кода (так как оно работает по умолчанию в нашем домене). Это не помогло, и это то, как доменное = пустой указатель; законченный в этом вопросе.

12
задан Mogsdad 22 July 2013 в 16:26
поделиться

2 ответа

Некоторые мысли:

  • Не используйте пути логических дисков для доступа к сетевым ресурсам из кода. Всегда используйте пути UNC (например, \\ SERVER \ Share \ Filename.ext ).
  • Включите аудит событий входа / выхода из вашей локальной политики безопасности, чтобы при вызове метода Impersonate вы могли детально отслеживать сбой / успех.
  • Лучше всего создать учетную запись в своем собственном домене, которая имеет то же имя пользователя и пароль, что и учетная запись в другом домене. Выполните аутентификацию вне своего домена, и сквозная аутентификация предоставит вам доступ к общему сетевому ресурсу в другом домене.
7
ответ дан 2 December 2019 в 23:07
поделиться

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

0
ответ дан 2 December 2019 в 23:07
поделиться
Другие вопросы по тегам:

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