最近,我创建了一种使用凭据通过网络传输文件的方法。为此我使用的是WIN-32 API LogonUser。 LogonUser使用advapi32.dll。这限制了我们在我们部署Web应用程序的操作系统中提供和支持此dll。
[System.Runtime.InteropServices.DllImport("advapi32.dll", SetLastError = true, CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
public static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
private static string CopyToNetwork(string _sourceFile, string _targetFile, string _domain, string _userName, string _password)
{
IntPtr tokenHandle = new IntPtr(0);
bool returnValue = LogonUser(_userName, _domain, _password, 9, 3, ref tokenHandle);
if(returnValue)
{
using(WindowsIdentity wid = new WindowsIdentity(tokenHandle))
{
using(WindowsImpersonationContext impersonatedUser = wid.Impersonate())
{
File.Copy(_sourceFile, _targetFile, IS_OVERWRITE);
}
}
}
}
现在,我们不希望这种依赖。我们可以使用纯.Net做同样的事情吗?意思是不使用任何WIN API。