【问题标题】:Custom authentication when mapping network drive - is this possible?映射网络驱动器时的自定义身份验证 - 这可能吗?
【发布时间】:2012-10-29 19:30:51
【问题描述】:

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

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

如果这不可能,有人可以解释选择使用不同凭据连接的目的是什么吗?这些凭据在哪里使用,是否由 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


【解决方案1】:

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

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

关键在于,这个新应用程序将简单地使用 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

【讨论】:

  • 感谢您的回复!这是一个有趣的想法。我实际上并没有尝试使用 AD。在您的示例中,我有一个带有子文件夹“networkdrive”的站点,我可以在映射驱动器时连接到该站点(在 IIS 中启用 WebDAV 允许我这样做)。我想要做的是提示用户输入登录凭据,然后进行一些自定义身份验证,最终只是获取他们提供的凭据,将它们登录到我的网站,并在成功后添加一个身份验证 cookie,以便对目录的后续请求是认证。希望这是有道理的!
  • 我应该指出,我的场景中的子文件夹(网络驱动器)不是设置为 Web 应用程序,而是一个虚拟目录。你是这个意思吗?
  • 是的,我不知道你将如何做到这一点,我对 IIS 上的 Webdav 的理解意味着你需要使用 Windows 身份验证,除非你有一些帐户到帐户的映射正在进行,比如用户 A 映射到 Windows帐户 A,在这种情况下会导致复杂性,我不确定您将如何伪造 Windows ident 令牌。
  • 是的,我也开始这么认为了。我已经从 OP 中的那个链接实现了这个例子,它几乎可以工作,但不完全。它适用于浏览器。
  • 另外,感谢您的链接。我也看到了那篇文章 - 我能够让它与 Windows 身份验证一起使用。我只是希望我可以在上面添加我自己的身份验证。当用户选择“与不同的凭据连接”时,我仍然没有找到有关凭据的使用方式/位置的任何信息。
猜你喜欢
  • 2016-10-27
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多