Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET应用程序通过Windows身份验证或窗体身份验证对Active Directory或SQL进行身份验证_Asp.net_Sql_Active Directory_Asp.net Membership_Membership - Fatal编程技术网

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

ASP.NET应用程序通过Windows身份验证或窗体身份验证对Active Directory或SQL进行身份验证,asp.net,sql,active-directory,asp.net-membership,membership,Asp.net,Sql,Active Directory,Asp.net Membership,Membership,我正在编写一个需要多种形式认证的应用程序 应用程序需要支持对Active Directory的身份验证,但如果用户不在Active Directory中,则能够故障回复到SQL成员资格提供程序。我们可以根据提供的用户名在代码中处理SQL提供程序的失败,因为用户名的格式与Active Directory用户名的格式不同 这可能吗?我的意思是,我可以使用成员资格并同时使用ActiveDirectoryMembershipProvider和SqlMembershipProvider吗?还是必须使用自己

我正在编写一个需要多种形式认证的应用程序

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

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

另一个额外增加的复杂性是,我希望基于Windows身份验证自动对内部用户进行身份验证,返回AD,但对不在内部网络上的用户或使用SQL提供程序的用户使用Forms身份验证

这些很可能是独立的服务器,一个是内部的,另一个是外部的,因此我有很多计划要做,以确定数据复制,以及如何在广告用户点击外部服务器时对其进行身份验证等

我想知道当我开始走这条路的时候,外面有什么想法。我想做的事是不是甚至可以不用我自己去做,或者有没有办法把这些结合起来


谢谢你的回复

我最初问这个问题的原因是,大约7年前,我使用IIS进行身份验证,然后将凭据传递回LotusDomino服务器Web应用程序,从而使这个特定的senerio正常工作。如果用户未通过Windows身份验证/ISS进行身份验证,则Domino将处理身份验证。这就是我想在这里做的,但真的想不出一种方法来让它在IIS中工作

至于你剩下的答复,我想你已经走上了我需要走的路。我已经想清楚了,并且在脑海里反复思考了很多。无论如何,这两台服务器上的应用程序都会有所不同,因为对外部服务器上数据的访问将受到限制。事实上,已经有这么多不同了,我可以将它们视为两个应用程序,这样就不需要在同一个应用程序中使用两种类型的身份验证

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

另外一个想法是,是否有一种方法可以将足够的AD拉入SQL数据库,从而允许我使用其AD凭据从外部服务器对SQL数据库的用户进行身份验证,而不会产生任何安全问题?我希望我能清楚地输入我的想法

再次感谢


Tim

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

您可以使用自定义提供程序通过表单身份验证对Active Directory或SQL用户存储进行身份验证。但是,广告用户仍然需要输入用户名和密码。虽然我从未结合使用过这两种方法,但我曾使用表单身份验证在某个时间对这两个源进行身份验证

我想你可能想考虑降低你的系统的“灵活性”。如果您有一个面向外部的服务器和一个面向内部的服务器,您可以简单地更改应用程序每个副本上的提供程序配置,以与不同的源相对应。然后,您可以将内部身份验证配置为使用Windows(自动)身份验证,将外部身份验证配置为使用表单身份验证


我认为内部用户不应该使用外部服务器来访问应用程序。如果是,他们应该有一个存储在SQL中的用户帐户,与他们的广告帐户完全分离。基本上,当有人从外部访问应用程序时,他们是作为外部用户,不考虑他们的物理位置。

这是我处理类似情况的方式,基于:

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

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

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

    关于混合身份验证(Windows和Fo)