gpt4 book ai didi

c# - 使用 asp.net 代码中的凭据从网络位置读取文件

转载 作者:行者123 更新时间:2023-12-02 22:19:37 25 4
gpt4 key购买 nike

我想从网络上存在的文件夹中读取文件。

当我尝试手动访问此文件夹时(通过运行命令给出类似 \\ABCServer\Documents 的路径)它要求我提供凭据(用户名和密码)。在提供正确的凭据后,我能够访问/读取文件。

当我尝试从 ASP.NET 中的 C# 代码读取相同的文件时,出现错误:

Login Failure: unkown username or bad password

如何在读取文件时通过 C# 代码传递凭据?

下面是我使用的部分代码:

Stream s = File.OpenRead(filePath);
byte[] buffer = new byte[s.Length];
try
{
s.Read(buffer, 0, (Int32)s.Length);
}
finally
{
s.Close();
}

注意:

  • 代码运行良好
  • 我正在使用 ASP.NET 4.0 和 C#
  • IIS版本为7.5

最佳答案

这是来自 http://support.microsoft.com/kb/306158

public const int LOGON32_LOGON_INTERACTIVE=2;
public const int LOGON32_PROVIDER_DEFAULT=0;

WindowsImpersonationContext impersonationContext;

[DllImport("advapi32.dll")]
public static extern int LogonUserA(String lpszUserName,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);

[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern int DuplicateToken(IntPtr hToken,
int impersonationLevel,
ref IntPtr hNewToken);

[DllImport("advapi32.dll", CharSet=CharSet.Auto, SetLastError=true)]
public static extern bool RevertToSelf();

[DllImport("kernel32.dll", CharSet=CharSet.Auto)]
public static extern bool CloseHandle(IntPtr handle);

private bool impersonateValidUser(String userName, String domain, String password) {
WindowsIdentity tempWindowsIdentity;
IntPtr token=IntPtr.Zero;
IntPtr tokenDuplicate=IntPtr.Zero;

if(RevertToSelf()) {
if(LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, ref token)!=0) {
if(DuplicateToken(token, 2, ref tokenDuplicate)!=0) {
tempWindowsIdentity=new WindowsIdentity(tokenDuplicate);
impersonationContext=tempWindowsIdentity.Impersonate();
if(impersonationContext!=null) {
CloseHandle(token);
CloseHandle(tokenDuplicate);
return true;
}
}
}
}
if(token!=IntPtr.Zero)
CloseHandle(token);
if(tokenDuplicate!=IntPtr.Zero)
CloseHandle(tokenDuplicate);
return false;
}

private void undoImpersonation() {
impersonationContext.Undo();
}

关于c# - 使用 asp.net 代码中的凭据从网络位置读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13919975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com