簡體   English   中英

如何將文件從需要身份驗證的計算機復制到本地計算機?

[英]How to I copy a file from a computer that requires authentication to my local machine?

我用的時候:

File.Copy(strRemoteFolder, strLocalFolder)

我收到帶有以下消息的UnauthorizedAccessException :“對路徑...的訪問被拒絕。”

在.NET中,如何從需要身份驗證的遠程計算機復制文件到本地計算機? 我知道我將需要以某種方式提供用戶名和密碼,但是我不知道如何通過.NET中的API提供該信息。

您可以使用非托管的LogonUser函數獲取遠程計算機上會話的帳戶令牌,然后調用WindowsIdentity.Impersonate使用該會話。 WindowsIdentity.Impersonate上的MSDN頁面描述了如何對LogonUser進行p / invoke調用。

由於您將無法訪問本地計算機,因此您可能無法使用File.Copy,但是可以調用File.OpenRead打開遠程文件,然后還原令牌。 像這樣的東西:

[DllImport("advapi32.dll")]
public static extern bool LogonUser(string lpszUsername, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, out IntPtr phToken);
[DllImport("kernel32.dll")]
public static extern bool CloseHandle(IntPtr hObject);

public static Stream OpenFileWithAccount(string filename, string username, string domain, string password)
{
    IntPtr token;
    if (!LogonUser(username, domain, password, 2, 0, out token))
    {
        throw new Win32Exception();
    }
    try
    {
        using (WindowsIdentity.Impersonate(token))
        {
            return File.OpenRead(filename);
        }
    }
    finally
    {
        CloseHandle(token);
    }
}

使用LogonUser登錄遠程計算機的建議肯定是錯誤的。 您應該將WNetAddConnection2NetUseAdd與參數級別2( USE_INFO_2 )本機API一起使用以進行遠程登錄。

調整目標系統上的共享特權以允許訪問。

未經身份驗證,您將無法從受保護的服務器復制文件。

您可以使用advapi32.dll中包含的LogonUser() 我還沒有親自使用它,但是看起來很簡單。

[DllImport("ADVAPI32.DLL")] 
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, 
int dwLogonType, int dwLogonProvider, out int phToken);

http://www.codeproject.com/KB/cs/cpimpersonation1.aspx
http://www.pinvoke.net/default.aspx/advapi32.logonuser

由於您可以控制兩台計算機,因此可以在兩台計算機上創建具有匹配密碼的本地用戶,然后以該用戶身份運行程序。

或者,您可以只在遠程計算機上創建用戶,然后使用該用戶的用戶名/密碼將驅動器映射到該計算機。 您可以將用戶指定為RemoteServer\\NewUser 因此, 此處引用的要最終使用的參數將use s: \\\\remoteserver\\share /USER:RemoteServer\\NewUser password 然后再次調用net,但是use s: /delete進行清理...

(這里的假設是您已經正確配置了用戶以訪問所涉及的特定共享/文件夾。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM