2

我正在为我的公司开发一个网站,该网站可在我们的内部网络和互联网上使用。我被问到一些对我来说似乎不可能的事情,但我想在真正说之前问这个问题!

我们公司有两种类型的用户,一种是实际在 Active Directory 中注册的用户(等等有一个 Windows 登录帐户),另一种不是。

在我们的内部网络上,我们使用HTTPContext.Current.User.Identity.Name 通过此身份验证提供的身份,如果用户确实存在,我可以检查 Active Directory 并授权他访问该网站。这是为了通过我们的内部网络进行访问。这很好,因为通过内部网络访问网站的每个人都需要有一个 AD 帐户。

现在,主要问题是互联网访问!目前,我有一个弹出窗口显示并要求输入登录名/密码(非常基本,对于不在 AD 上的每个人都一样,不要问我为什么,这是一个要求......) . 如果用户提供正确的登录密码,即使我们不知道他的真实身份,他也可以访问该网站。但是我被要求在此弹出窗口上有一个链接,上面写着“使用您的 Windows 凭据登录”。然后我需要检索凭据并在 AD 中检查它们是否正确。

在互联网上查看后,我找到了应该管理多种身份识别方式的 Windows Identity Fundation,但我觉得这不是我需要的,对于我想做的事情似乎有点矫枉过正!

有人试过这个吗??我知道(我告诉他们)这是一个非常奇怪的要求,但我说无论如何我都会看看......

[编辑 2013/09/13] 我尝试了一些东西,但这不起作用也许你可以解释一下原因。我在 IIS 中设置我的网站以允许匿名连接。我添加了一个带有登录表单的页面(用于基本身份验证,您无需经过身份验证即可访问)以及指向在 web.config 中配置的另一个页面的链接以拒绝匿名连接。我希望它会弹出 Internet Explorer 窗口进行身份验证,但我只是得到了 401 - 未经授权的访问。这是正常行为还是配置问题?

4

2 回答 2

1

如果我理解正确,您将面临两个困难:

  1. 在一个 ASP.NET 应用程序中拥有 2 种不同的身份验证方法
  2. 在您公司的 AD 中手动测试某个用户名和密码对是否有效

我对每个问题都有一个建议:

  1. 使用放置在不同文件夹中的 2 个不同的 web.config 文件。使一个使用 Windows 集成身份验证和另一个 FormsAuthentication。让未经身份验证的用户首先登陆 Windows 集成模式登录页面,并在失败的情况下回退到 FormaAuthentication 登录延迟。

  2. 在 FormsAuthentication 登录页面中,询问用户名和密码并使用 DirectoryEntry 类通过 LDAP 与您的 AD 通信。您不需要任何秘密凭据来执行此操作。您可以使用刚刚从用户那里收到的实际配对。只要问广告“我叫什么名字?” 使用这些确切的凭据。如果成功,他们就可以,如果没有,他们就不行。

于 2013-09-11T14:02:04.803 回答
0

我为我公司的多个应用程序做了几乎完全一样的事情,我们这样解决了它:

  1. 在您的应用程序中设置登录页面,并将身份验证模式设置为表单

  2. 当用户登录时,检查该用户在 Active Directory 中是否有效

  3. 如果凭据未针对 Active Directory 成功验证,请检查凭据是否对您的自定义提供程序有效。

    然后,我们还为在连接域的机器上通过身份验证的人提供“自动登录”。这是 IIS 中的一个单独应用程序,配置了 Windows 身份验证。然后,所有机器都设置为信任*.ourcompanyname.comIntranet 应用程序,然后,当该域上的站点请求 Windows 凭据时,机器会自动提供。在这种情况下,我们检测身份,设置机器密钥加密的 cookie,然后重定向回原始应用程序。

在原始应用程序中,在登录之前,我们检查此 cookie 的存在,解密它(两个应用程序共享一个机器密钥),然后自动登录用户。

这给了我们以下结果:

  1. 非公司用户可以使用我们的应用程序管理的自定义用户名/密码进行身份验证
  2. 公司用户可以使用其 Active Directory 凭据手动进行身份验证
  3. 公司用户在使用连接到域的 PC 时不必键入凭据。
于 2013-09-11T14:09:49.210 回答