ASP.Net 中不同的认证方式

本文关键字:认证 方式 Net ASP | 更新日期: 2023-09-27 18:31:05

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

我们公司有两种类型的用户,那些在Active Directory中实际注册的用户(等等有一个Windows登录帐户)和那些没有

注册的用户。

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

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

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

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

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

ASP.Net 中不同的认证方式

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

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

关于每个问题,我有一个建议:

  1. 使用放置在不同文件夹中的 2 个不同的 web.config 文件。使一个使用Windows集成身份验证,另一个使用FormsAuthentication。让未经身份验证的用户首先登陆 Windows 集成模式登录页面,并在发生故障时回退到 FormaAuthentication 登录页。

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

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

  1. 将应用程序中的登录页和身份验证模式设置为表单

  2. 当用户登录时,检查该用户在活动目录中是否有效

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

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

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

这给了我们以下结果:

  1. 非公司用户可以使用我们的应用程序管理的自定义用户名/密码进行身份验证
  2. 公司用户可以使用其活动目录凭据手动进行身份验证
  3. 公司用户在使用其连接到域的电脑时不必键入凭据。