小编典典

ASP.NET应用程序通过Windows身份验证或窗体身份验证向Active Directory或SQL进行身份验证

sql

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

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

这有可能吗?我的意思是,我可以同时使用成员身份并同时使用ActiveDirectoryMembershipProvider和SqlMembershipProvider,还是必须自己滚动?

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

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

我想知道当我沿着这条路走时,那里有什么想法。如果我不自己动手,是否甚至想做些什么?或者是否有办法将它们网格化?


谢谢回复。

我最初询问的原因是,大约7年前,我能够使用IIS来进行身份验证,然后将凭据传递回Lotus Domino Server Web
App。如果未通过Windows身份验证/
ISS对用户进行身份验证,则Domino将处理身份验证。这就是我想要在此处执行的操作,但实际上想不出一种使它在IIS中工作的方法。

至于您的其余答复,我认为您已经按照我的要求采取了行动。我已经考虑了这一点,并在我的脑海中抛了很多东西。无论如何,这两个服务器上的应用程序都将有所不同,因为总会限制对外部服务器上数据的访问。事实已经非常不同了,我可以将它们视为两个应用程序,这样就不必在同一应用程序中使用两种类型的身份验证了。

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

还有一个想法-
是否有一种方法可以将足够多的AD提取到SQL数据库中,以允许我使用用户的AD凭据从外部服务器对SQL数据库进行身份验证,而不会造成任何安全问题?我希望我清楚地输入了我的想法。

再次感谢!

提姆


阅读 165

收藏
2021-04-15

共1个答案

小编典典

这是我根据此信息处理类似情况的方式:

  1. 配置应用程序以使用窗体身份验证。
  2. 将LoginUrl设置为一个名为WinLogin.aspx的页面。
  3. 在WinLogin.aspx中,使用Request.ServerVariables [“ LOGON_USER”]获取用户名,然后调用FormsAuthentication.RedirectFromLoginPage(authorizedUserName,false)登录它们。我想您也可以手动检查Active Directory。
  4. 创建一个HTML页面,该页面重定向到名为Login.aspx的页面
  5. Login.aspx是您的标准用户名/密码登录名。
  6. 在IIS中,在整个站点上启用“集成身份验证和匿名”,但是拒绝对WinLogin.aspx的匿名访问。
  7. 在IIS中,将401错误设置为在步骤3中创建的页面。

基本上发生的是,当未经身份验证的用户访问该站点时,他们将被重定向到WinLogin.aspx。由于匿名功能已关闭,因此集成安全性会进行检查。如果通过,则可以运行WinLogin中的自定义代码。如果集成安全性检查失败,则会发生401错误。您的自定义401页将重定向到Login.aspx,用户可以在其中使用其用户名和密码通过SQL提供程序登录。

2021-04-15