.net - 映射网络驱动器时的自定义身份验证 - 这可能吗?

标签 .net authentication iis-7.5 webdav mapped-drive

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

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

如果这不可能,有人可以解释选择使用不同凭据连接的目的是什么吗?这些凭据在哪里使用,是否被 IIS 中的某种形式的身份验证使用? 使用不同的凭据肯定需要某种设置吗?

更新:

使用摘要式身份验证,我现在可以在 Fiddler 中看到授权 header ,但我不确定是否有可能以某种方式解析密码。我还在网上看到一些文章表明摘要式身份验证存在根本性缺陷,但根据 Authentication in ASP.NET: .NET Security Guidance ,如果我的用户存储在自定义数据库中,我不应该使用基本身份验证。

那么让我列出一个更简单的场景,希望更容易回答:

我正在尝试实现将网络驱动器映射到我站点中的虚拟目录时使用的自定义身份验证。我正在使用 IIS 7.5。我需要在 HttpModule 或 Global.asax 事件中解析用户名和密码以处理自定义登录。有没有人做过这样的事情或有任何意见/建议?

我找到了 this example which seems like it could work - 但它适用于浏览器。我现在已经在我的测试站点上实现了它,但问题是在映射驱动器时,返回了 401 质询(应该提示登录)但 Windows 却显示一条错误消息:

Windows cannot access Http://myServer/mySite/myFolder

Check the spelling of the name. Otherwise, there might be a problem with your network.

Error code: 0x80070043 The network name cannot be found

我想知道我是否可以格式化/构建一个基本/摘要身份验证样式的质询响应,以便 Windows 提示登录而不是显示找不到网络?有谁知道这是否可能?

更新 2:

我看到使用 Fiddler,Windows 身份验证包含一个 Negotiate header 。因此,除了 WWW-Authenticate: Basic header 之外,我还尝试在我的质询响应中包含该 header 。这似乎解决了我上面描述的“找不到网络名称”错误的问题,但不幸的是现在后续请求中没有包含授权 header (在我提供我的凭据之后)所以我无法提取用户名和密码。

我在这里没有什么想法了,虽然似乎有很多关于身份验证的文档,但关于 WebDAV 身份验证(或如何使用它)或映射驱动器时的自定义身份验证的文档似乎并不多.

有没有人有任何见解或想法?

解决方案:

看起来我无法完全按照自己的意愿行事。我将根据 @AdamV 对 Windows 身份验证的建议进行进一步测试,因为它看起来可能是我唯一的选择。

最佳答案

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

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

关键是,这个新应用程序将只使用 Windows 身份验证,而根站点可以使用您喜欢的任何身份验证。这样,用户登录到您的站点,然后选择或键入网络驱动器路径,这将被发送到子应用程序,并自动询问 Windows 凭据,它所做的第一个操作是使用 Windows 身份验证 token 映射驱动器.您将需要关闭身份模拟并设置通过其凭据执行代码的权限以实现此目的。

当他们想要切换驱动器时,将他们从/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

关于.net - 映射网络驱动器时的自定义身份验证 - 这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13128341/

相关文章:

c# - WPF中TabControl的ItemsSource绑定(bind)到List时如何设计TabPage?

php - 在 laravel 5.2 中使用默认身份验证路由对用户进行身份验证后设置 session 数据

IIS 7.5 应用程序初始化 1 安装失败

visual-studio-2010 - 将 ASP.NET MVC 2 部署到面向 .NET 3.5 的 IIS 7.5

c# - 如何强制派生类实例化基类的构造函数

c# - 我在哪里可以得到 NLog 提供的 "ambient properties"的列表?

python - Django ModelBackend.authenticate 如何工作?

python - django-allauth 在出错时重定向到自定义页面

IIS 日志 : sc bytes

.net - Entity Framework 代码首先使用时间戳类型