我在 IIS 7.5 中的网站中设置了一个虚拟目录,用户可以将网络驱动器映射到该目录。我想做的是设置某种自定义身份验证,用户在映射驱动器时选择“使用不同的凭据连接”,然后我可以使用这些凭据将它们登录到我的网站,然后让他们查看内容的虚拟目录。这可能吗?
我似乎找不到(以编程方式)获取映射驱动器时使用的凭据的方法。现在,我对虚拟目录的每个请求都有一个HttpModule
并HttpHandler
执行,但我没有看到检测凭据的方法。有没有人做过这样的事情?
如果这是不可能的,有人可以解释选择使用不同凭据连接的目的是什么?这些凭据在哪里使用,是否由 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 身份验证建议进行进一步测试,因为它看起来可能是我唯一的选择。