我正在编写需要多种身份验证形式的应用程序。

应用程序需要支持对Active Directory的身份验证,但如果用户不在Active Directory中,则能够故障回复到SQL成员资格提供程序。我们可以根据提供的用户名处理代码中SQL提供程序的失败,因为用户名将是与Active Directory用户名不同的格式。

这甚至可能吗?我的意思是,我可以使用会员资格并同时使用ActiveDirectoryMembershipProvider和SqlMembershipProvider,还是我必须自己动手?

另一个额外增加的复杂性是我希望自动将基于Windows身份验证的内部用户验证回AD,但对不在我们内部网络上的用户或使用SQL Provider的用户使用Forms身份验证。

这些很可能是单独的服务器,一个是内部服务器,另一个是外部服务器,因此我有很多计划要弄清楚数据复制,以及如果AD用户访问外部服务器等,我将如何对其进行身份验证。

当我开始走这条路时,我想知道那里有什么想法。如果没有我自己的想法,我想要做什么,或者有没有办法将它们融合在一起?


感谢您的回复。

我原来问的原因是因为我能够在大约7年前使用IIS进行身份验证,然后将凭据传递回Lotus Domino Server Web App,从而使这个特定的senerio工作。如果用户未通过Windows身份验证/ ISS进行身份验证,则Domino将处理身份验证。这就是我在这里要做的事情,但实在想不出让它在IIS中运行的方法。

至于你的其他答复,我认为你正在接受我需要采取的方式。我已经想到了这一点,并把它扔在了我脑海里。无论如何,应用程序在两台服务器上会有所不同,因为无论如何都会限制对外部服务器上的数据的访问。事实上,我可能只会将这些视为两个应用程序,因此无需在同一个应用程序中使用两种类型的身份验证。

我正在尝试为外部服务器编写自己的身份验证/登录窗口,如果用户尝试使用外部服务器上的AD凭据登录,我将能够检测到并重定向它们到内部服务器。如果他们不在本地网络或VPN上,他们将无法访问。这部分仍然有一些思考过程,所以我不确定。

作为一个额外的想法 - 有没有办法将AD足够的数据放入SQL数据库,以允许我使用他们的AD凭据从外部服务器对SQL数据库的用户进行身份验证,而不会产生任何安全问题?我希望我能清楚地输入我的想法......

再次感谢!

有帮助吗?

解决方案

这是我基于此信息

  1. 配置应用程序以使用Forms身份验证。
  2. 将LoginUrl设置为名为WinLogin.aspx的页面。
  3. 在WinLogin.aspx中,使用Request.ServerVariables [<!> quot; LOGON_USER <!> quot;]获取用户名,然后调用FormsAuthentication.RedirectFromLoginPage(authorizedUserName,false)将其登录。我猜您可以手动检查Active Directory也是如此。
  4. 创建一个重定向到名为Login.aspx
  5. 的页面的html页面
  6. Login.aspx是您的标准用户名/密码登录。
  7. 在IIS中,在整个站点上启用集成身份验证和匿名,但拒绝匿名访问WinLogin.aspx。
  8. 在IIS中,将401错误设置为在步骤3中创建的页面。
  9. 基本上发生的情况是,当未经过身份验证的用户访问该网站时,他们会被重定向到WinLogin.aspx。由于匿名被关闭,集成安全性会进行检查。如果通过,WinLogin中的自定义代码可以运行。如果集成安全检查失败,则会发生401错误。您的自定义401页面重定向到Login.aspx,用户可以使用SQL用户提供的用户名和密码登录。

其他提示

据我所知,Web应用程序配置为使用Windows身份验证或表单身份验证,但不能同时使用两者。因此,我不认为可以自动验证内部用户,同时要求其他人输入用户名/密码。

您可以使用自定义提供程序通过Forms身份验证向Active Directory或SQL用户存储进行身份验证。但是,AD用户仍需要输入用户名和密码。虽然我从未将这两种方法结合起来,但我已经使用Forms身份验证来同时对这两种来源进行身份验证。

话虽如此,我想你可能要考虑减少<!>“灵活性<!>”;你的系统。如果您有面向外部的服务器和面向内部的服务器,则只需更改应用程序的每个副本上的提供程序配置即可针对其他来源。然后,您可以将内部配置为使用Windows(自动)身份验证,将外部配置为使用Forms身份验证。

恕我直言,我认为内部用户不应该使用外部服务器来访问应用程序。如果是,则应将用户帐户存储在SQL中,并与其AD帐户完全分开。基本上,当有人从外部访问应用程序时,无论他们的实际位置如何,他们都充当外部用户。

嗯,可以使用ActiveDirectoryMembershipProvider和SqlMembershipProvider,但这需要您使用自己的代码而不是Login控件设计登录页面。

关于混合身份验证(Windows和Forms),据我所知,只有IIS 7才能让它变得简单和干净。有关详细信息,请参阅此帖子

http://mvolo.com/blogs/serverside/archive/2008/02/11/IIS-7.0-Two_2D00_Level-Authentication-with-Forms-Authentication-and-Windows-Authentication.aspx

scroll top