我在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
标头之外,我还尝试在我的质询响应中包含该标头。这似乎解决了我上面描述的“无法找到网络名称”错误的问题,但不幸的是现在后续请求中没有包含授权标头(在我提供我的凭据后)所以我无法提取用户名和密码。
我这里的想法已经不多了,虽然似乎有很多关于身份验证的文档,但是在WebDAV身份验证(或如何使用它)上似乎没有太多,或者在映射驱动器时自定义身份验证。
有没有人有任何见解或想法?
SOLUTION:
看起来我不能完全按照自己的意愿行事。我将使用@AdamV建议使用Windows身份验证进行进一步测试,因为它看起来可能是我唯一的选择。
答案 0 :(得分:3)
我假设您尝试将Active Directory与IIS结合使用以映射网络驱动器。如果这个假设是正确的,我有一个想法。
您的第一个网站位于http://www.mysite.com/,您可以登录。然后,作为IIS中的子文件夹和新的Web应用程序,您设置http://www.mysite.com/networkdrive/,在post参数或cookie中通过http://www.mysite.com/接收他们想要使用的网络路径。
这个新应用程序只会使用Windows Auth,根网站可以使用您喜欢的任何身份验证。这样,用户登录到您的站点,然后选择或键入网络驱动器路径,这将被发送到子应用程序,并自动请求Windows凭据,它所做的第一个操作是使用Windows身份验证令牌映射驱动器。您需要关闭身份模拟以及设置通过其凭据执行代码的权限才能实现此目的。
当他们想要切换驱动器时,请将它们从/ networkdrive / app中注销,然后将它们发送回驱动器选择页面/表单。
有关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