我在IIS 7.5的网站中设置了一个虚拟目录,用户可以将网络驱动器映射到。我想做的是设置某种自定义身份验证,当用户映射驱动器时,用户选择"与不同的凭据连接",然后我可以使用这些凭据将它们登录到我的网站中,然后让他们查看内容虚拟目录。这可能吗?
我似乎找不到(程序上)在映射驱动器时使用的凭据。现在,我在每个请求上执行了一个HttpModule
和HttpHandler
到虚拟目录,但是我没有看到一种检测凭据的方法。有人做过这样的事情吗?
如果不可能,有人可以解释选择与不同凭据连接的目的吗?这些凭证在哪里使用,是由IIS中某种形式的身份验证使用的吗?肯定必须使用使用进行某种设置?
更新:
使用Digest Authentication,我现在可以看到授权标题出现在Fiddler中,但是我还不确定是否可以以某种方式将密码解析。我还曾在网上看到一些文章,这些文章建议消化身份验证从根本上存在缺陷,但是根据ASP.NET:.NET安全指南中的身份验证,如果将用户存储在自定义数据库中,我不应使用基本身份验证。
所以让我提出一个更简单的场景,希望更容易回答:
我正在尝试实现将网络驱动器映射到我网站中虚拟目录时使用的自定义身份验证。我正在使用IIS 7.5。我需要分析用户名和密码以在HttpModule
或Global.asax事件中处理自定义登录。有没有人做过这样的事情或有任何建议/建议?
我找到了这个示例,它似乎可以工作 - 但它是用于浏览器的。我现在已经在测试网站上实现了它,但是问题是在映射驱动器时,返回了401挑战(应该提示登录),但是Windows显示了一个错误,说:
Windows无法访问
Http://myServer/mySite/myFolder
检查名称的拼写。否则,您的 网络。
错误代码:0x80070043找不到网络名称
我想知道我是否可以格式化/构建基本/消化验证风格的挑战响应,以便Windows提示登录而不是显示网络?有人知道这是否可能吗?
更新2:
我看到了使用提琴手,Windows身份验证包括Negotiate
标头。因此,除了WWW-Authenticate: Basic
标头外,我还尝试在挑战响应中加入该标头。这似乎已经解决了上述"找不到网络名称"的问题,但不幸的是,现在在后续请求中没有包含授权标题(在我提供凭据之后),因此我无法撤出用户名和密码。
我在这里用完了想法,尽管有关身份验证的文档似乎有很多文档,但在映射驱动器绘制驱动器时,WebDAV身份验证(或如何使用)似乎并不多。。
有人有任何见识或想法吗?
解决方案:
看起来我无法做我想做的事情。我将对Windows身份验证的建议进行进一步的测试,因为它看起来可能是我唯一的选择。
我假设您正在尝试将Active Directory与IIS结合使用来映射网络驱动器。如果这个假设是正确的,我有一个想法。
您拥有第一个网站http://www.mysite.com/,您可以登录它。然后,作为IIS中的子文件夹和新的Web应用程序,您设置了http://www.mysite.com/networkdrive/将在post parameter或cookie。
启动器是,此新应用程序将简单地使用Windows auth,而根网站可以使用您喜欢的任何身份验证。这样,用户将登录到您的网站,然后在网络驱动器路径中选择或类型,将其发送到Sub应用程序,并自动询问Windows凭据,并且它执行的第一个操作是使用Windows auth auth token绘制驱动器。您将需要关闭身份模仿,并设置通过其凭据执行代码以实现这一目标的权利。
当他们想切换驱动器时,将它们记录在/networkDrive/app中,然后将它们发送回驱动器选择页/表单。
有关Windows身份验证的信息:http://msdn.microsoft.com/en-us/library/907hb5w9(v = vs.100).aspx
更新:响应WebDav注释,这是我在配置WebDav时发现的一些文档,但它仍然使用Windows Authentication。http://www.iis.net/learn/install/installing-publishing-technologies/installing-and-configuring-webdav-on-iis