【发布时间】:2012-10-29 19:30:51
【问题描述】:
我在 IIS 7.5 中的网站中设置了一个虚拟目录,用户可以将网络驱动器映射到该目录。我想做的是设置某种自定义身份验证,用户在映射驱动器时选择“使用不同的凭据连接”,然后我可以使用这些凭据将它们登录到我的网站,然后让他们查看内容的虚拟目录。这可能吗?
我似乎找不到(以编程方式)获取映射驱动器时使用的凭据的方法。现在我有一个HttpModule 和HttpHandler 对虚拟目录的每个请求执行,但我没有看到检测凭据的方法。有没有人做过这样的事情?
如果这不可能,有人可以解释选择使用不同凭据连接的目的是什么吗?这些凭据在哪里使用,是否由 IIS 中的某种形式的身份验证使用?确实必须为使用不同的凭据进行某种设置?
更新:
使用摘要式身份验证,我现在可以在 Fiddler 中看到 Authorization 标头,但我还不确定是否可以以某种方式解析密码。我还在网上看到一些文章表明摘要式身份验证存在根本缺陷,但根据Authentication in ASP.NET: .NET Security Guidance,如果我的用户存储在自定义数据库中,我不应该使用基本身份验证。
所以让我列出一个更简单的场景,希望它更容易回答:
我正在尝试实现将网络驱动器映射到我站点中的虚拟目录时使用的自定义身份验证。我正在使用 IIS 7.5。我需要在HttpModule 或 Global.asax 事件中解析出用户名和密码来处理自定义登录。有没有人做过这样的事情或有任何建议/建议?
我找到了this example which seems like it could work - 但它是为浏览器设计的。我现在已经在我的测试站点上实现了它,但问题是在映射驱动器时,返回 401 质询(应该提示登录)但 Windows 反而显示一个错误:
Windows 无法访问
Http://myServer/mySite/myFolder检查名称的拼写。不然你的可能有问题 网络。
错误代码:0x80070043 找不到网络名称
我想知道是否可以格式化/构建基本/摘要式身份验证样式的质询响应,以便 Windows 提示登录而不是显示找不到网络?有谁知道这是否可能?
更新 2:
我看到使用 Fiddler,Windows 身份验证包含一个 Negotiate 标头。因此,除了WWW-Authenticate: Basic 标头之外,我还尝试在我的质询响应中包含该标头。这似乎解决了我上面描述的“找不到网络名称”错误的问题,但不幸的是,现在后续请求中没有包含 Authorization 标头(在我提供我的凭据之后),所以我无法提取用户名和密码。
我的想法已经不多了,虽然似乎有很多关于身份验证的文档,但似乎没有太多关于 WebDAV 身份验证(或如何使用它)或映射驱动器时的自定义身份验证的文档.
有没有人有任何见解或想法?
解决方案:
看起来我无法完全按照自己的意愿行事。我将使用 @AdamV 的 Windows 身份验证建议进行进一步测试,因为它看起来可能是我唯一的选择。
【问题讨论】:
-
因此您正试图允许某人使用不同的凭据连接到网络驱动器。我假设这都是通过 Active Directory 完成的?
标签: .net authentication iis-7.5 webdav mapped-drive