从 .NET Core 应用程序访问 Windows 文件共享时发生 UnauthorizedAccessException
UnauthorizedAccessException when accessing a Windows file share from .NET Core app
我有一个用 .NET 5(即将成为 .NET 6)编写的应用程序,允许用户访问存储在一堆不同的用户定义的 Windows 网络共享上的文件。该应用程序通过 BEARER 令牌进行保护,并且在 Linux 中使用 Kestrel 运行。
通过此应用程序,用户可以“附加”文件。基本上,告诉应用程序现有文件在 windows 网络共享上的存储位置。然后其他用户可以单击该 link,应用程序将为他们下载文件。
无论传入的用户名和密码如何,(或者如果我们提供可选的域名)应用程序总是抛出 UnauthorizedAccessException
这是调用 GetRequestStreamAsync() 时抛出的当前代码;
要下载的文件格式是典型的 UNC 路径。
\serverName\folder1\subfolder2\fileToDownload.pdf
转换为
file://serverName/folder1/subfolder2/fileToDownload.pdf
FileWebRequest request = (FileWebRequest)WebRequest.Create(uncLink);
request.Credentials = new NetworkCredential(userName, password);
request.Method = "POST";
Stream readStream = await request.GetRequestStreamAsync();
我阅读的每篇文章都以 IIS 为中心,并且是大约 10 年前的文章,因此没有帮助。
为将来可能 运行 遇到此问题的任何人回答问题。
我们找到了 this article 并以此为基础编写代码。最终,这涉及创建一个文件夹,然后我们将网络共享安装到该文件夹中,然后我们可以将该文件夹视为本地文件夹并从那里下载文件。
由于我们 运行 在 docker 中,我们还需要启用一些功能。
"DockerfileRunArguments": "--cap-add=SYS_ADMIN --cap-add=DAC_READ_SEARCH"
我有一个用 .NET 5(即将成为 .NET 6)编写的应用程序,允许用户访问存储在一堆不同的用户定义的 Windows 网络共享上的文件。该应用程序通过 BEARER 令牌进行保护,并且在 Linux 中使用 Kestrel 运行。
通过此应用程序,用户可以“附加”文件。基本上,告诉应用程序现有文件在 windows 网络共享上的存储位置。然后其他用户可以单击该 link,应用程序将为他们下载文件。
无论传入的用户名和密码如何,(或者如果我们提供可选的域名)应用程序总是抛出 UnauthorizedAccessException 这是调用 GetRequestStreamAsync() 时抛出的当前代码;
要下载的文件格式是典型的 UNC 路径。
\serverName\folder1\subfolder2\fileToDownload.pdf
转换为
file://serverName/folder1/subfolder2/fileToDownload.pdf
FileWebRequest request = (FileWebRequest)WebRequest.Create(uncLink);
request.Credentials = new NetworkCredential(userName, password);
request.Method = "POST";
Stream readStream = await request.GetRequestStreamAsync();
我阅读的每篇文章都以 IIS 为中心,并且是大约 10 年前的文章,因此没有帮助。
为将来可能 运行 遇到此问题的任何人回答问题。
我们找到了 this article 并以此为基础编写代码。最终,这涉及创建一个文件夹,然后我们将网络共享安装到该文件夹中,然后我们可以将该文件夹视为本地文件夹并从那里下载文件。
由于我们 运行 在 docker 中,我们还需要启用一些功能。
"DockerfileRunArguments": "--cap-add=SYS_ADMIN --cap-add=DAC_READ_SEARCH"