传递身份验证 - IIS 虚拟目录

Pass-Through Authentication - IIS Virtual Directory

(Intranet) 我正在尝试设置一个网站,该网站将从网络共享 (\\servername\folder\file) 提供文件。只有通过活动目录组有权访问网络文件夹的用户才能通过网站下载文件。

这是我现在的设置:

站点:

应用程序池:默认应用程序池

身份验证:Windows身份验证

子站点:

应用程序池:默认应用程序池

身份验证:Windows身份验证

虚拟目录:

物理路径:\\servername\Folder

物理路径凭证:应用程序用户(传递身份验证)

登录类型:ClearText

当我尝试使用这样的 link 导航到站点时:http://webserver/subsite/virtualdirectory/folder/file.xls,即使我输入的凭据应该有效,我也会反复提示输入凭据。在虚拟目录设置中,如果我将其从直通更改为 "specific user",它可以工作,但会绕过活动目录组的安全性。

我这里配置有误吗?

注意,我已经看过 Pass-through authentication not working. IIS 7

恐怕指定用户是实现此目的的唯一方法。

我建立了一个类似 \\server\shared 的共享文件夹。 当我监视 NTLM 身份验证时,我还注意到,如果我将用户指定为直通,则 IIS 将尝试访问大写的路径 \\SERVER\SHARED 并拒绝访问。

但是,如果我指定用户进行身份验证,NTLM 工作正常并且工作进程不会执行相同的操作。我还注意到工作和非工作操作的用户身份是相同的。

我在工作站和域环境中都试过了。但是,NTLM 和 Kerberos 的结果是相同的。所以我认为您可能需要接受特定用户作为解决方法。

正在进行两个单独的身份验证:

  1. 用户正在对您的网站进行身份验证。
  2. IIS 正在对文件共享进行身份验证。

这些是完全独立的操作。

我相信你 运行 喜欢 double hop problem: You can use the user's credentials to authenticate on your server, but you cannot (by default) send those credentials to another server. To enable that, you might be able to setup Kerberos delegation in Active Directory, which can get complicated

如果设置委派不是一个选项,那么您将不得不寻找另一种方式将这些文件提供给用户。

我同意,如果您确实希望共享的共享权限决定谁可以通过该站点下载文件,那么这是一个很难解决的问题。一种选择是直接 link 共享(如果用户的计算机可以通过网络访问服务器):

<a href="file://servername/Folder/somefile.txt">Download</a>

这在 IE 中有效,但在 Chrome 中无效,因为 Chrome 专门禁用 file:// links(除非您通过 plugin 启用它)。

另一个更复杂的选项是通过您的应用程序传输文件。您的应用程序可以访问该文件并枚举共享权限以查看用户是否具有访问权限,如果有则允许下载。但是 NTFS 权限是出了名的难以通过。

或者只是忽略共享权限并找到一些其他方法来确定此人是否应该具有访问权限(例如,一个特定的安全组)而不是依赖共享权限。