3

我在 IIS 7.5 中的网站中设置了一个虚拟目录,用户可以将网络驱动器映射到该目录。我想做的是设置某种自定义身份验证,用户在映射驱动器时选择“使用不同的凭据连接”,然后我可以使用这些凭据将它们登录到我的网站,然后让他们查看内容的虚拟目录。这可能吗?

我似乎找不到(以编程方式)获取映射驱动器时使用的凭据的方法。现在,我对虚拟目录的每个请求都有一个HttpModuleHttpHandler执行,但我没有看到检测凭据的方法。有没有人做过这样的事情?

如果这是不可能的,有人可以解释选择使用不同凭据连接的目的是什么?这些凭据在哪里使用,是否由 IIS 中的某种形式的身份验证使用?当然必须有某种设置来使用不同的凭据?

更新:

使用 Digest Authentication,我现在可以在 Fiddler 中看到 Authorization 标头,但我不确定是否可以以某种方式解析密码。我还在网上看到一些文章表明摘要式身份验证存在根本缺陷,但根据ASP.NET 中的身份验证:.NET 安全指南,如果我的用户存储在自定义数据库中,我不应该使用基本身份验证。

所以让我列出一个更简单的场景,希望它更容易回答:

我正在尝试实现将网络驱动器映射到我站点中的虚拟目录时使用的自定义身份验证。我正在使用 IIS 7.5。我需要解析出用户名和密码来处理自定义登录,无论是在一个HttpModule事件还是 Global.asax 事件中。有没有人做过这样的事情或有任何建议/建议?

我发现这个例子似乎可以工作- 但它适用于浏览器。我现在在我的测试站点上实现了它,但问题是在映射驱动器时,返回 401 质询(应该提示登录)但 Windows 显示一个错误,显示:

Windows 无法访问Http://myServer/mySite/myFolder

检查名称的拼写。否则,您的网络可能有问题。

错误代码:0x80070043 找不到网络名称

我想知道是否可以格式化/构建基本/摘要式身份验证样式的质询响应,以便 Windows 提示登录而不是显示找不到网络?有谁知道这是否可能?

更新 2:

我看到使用 Fiddler,Windows 身份验证包含一个Negotiate标头。因此,除了标题之外,我还尝试在我的质询响应中包含该WWW-Authenticate: Basic标题。这似乎解决了我上面描述的“找不到网络名称”错误的问题,但不幸的是,现在后续请求中没有包含 Authorization 标头(在我提供我的凭据之后),所以我无法提取用户名和密码。

我的想法在这里用完了,虽然似乎有很多关于身份验证的文档,但似乎没有太多关于 WebDAV 身份验证(或如何使用它)或映射驱动器时的自定义身份验证的内容。

有没有人有任何见解或想法?

解决方案:

看起来我不能完全按照我的意愿去做。我将使用 @AdamV 的 Windows 身份验证建议进行进一步测试,因为它看起来可能是我唯一的选择。

4

1 回答 1

3

我假设您正在尝试将 Active Directory 与 IIS 结合使用来映射网络驱动器。如果这个假设是正确的,我有一个想法给你。

您的第一个网站位于http://www.mysite.com/,您可以登录它。然后,作为 IIS 中的子文件夹和新的 Web 应用程序,您设置http://www.mysite.com/networkdrive/接收他们想要通过http://www.mysite.com/在 post 参数中使用的网络路径或曲奇饼。

更重要的是,这个新应用程序将简单地使用 Windows 身份验证,并且根站点可以使用您喜欢的任何身份验证。这样,用户登录到您的站点,然后选择或键入网络驱动器路径,这将被发送到子应用程序,并自动询问 Windows 凭据,它执行的第一个操作是使用 Windows Auth 令牌映射驱动器. 您将需要关闭身份模拟并设置权限以通过其凭据执行代码以实现此目的。

当他们想要切换驱动器时,将它们从 /networkdrive/ 应用程序中注销并将它们发送回驱动器选择页面/表单。

有关 Windows 身份验证的信息:http: //msdn.microsoft.com/en-us/library/907hb5w9 (v=vs.100).aspx

更新:作为对 WebDAV 评论的回应,这是我在配置 WebDAV 时找到的一些文档,但它仍然使用 Windows 身份验证。http://www.iis.net/learn/install/installing-publishing-technologies/installing-and-configuring-webdav-on-iis

于 2012-11-07T19:44:09.703 回答