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

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

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

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

另一个额外的增加的复杂性是,我想自动将基于Windows身份验证的内部用户身份验证回AD,但对不在我们内部网络上的用户或正在使用SQL提供程序的用户使用表单身份验证.

这些将很可能是单独的服务器,一个内部的,另一个是外部的,所以我有很多计划要做,以找出数据复制,以及如何对AD用户进行身份验证.

我想知道当我开始这条路时,有什么想法.是我想要做甚至没有我自己滚动,还是有办法网格化在一起?

谢谢回复.

我原来问的原因是因为我能够在7年前得到这个具体的senerio,使用IIS进行身份验证,然后将凭据传回给Lotus Domino Server Web App.如果用户未通过Windows身份验证/ ISS进行身份验证,那么Domino将处理身份验证.这是我在这里要做的,但是真的不能想办法让它在IIS中工作.

至于您的其余答复,我认为你是要采取的方式.我已经想到了这一点,把它扔在我的脑袋里.无论如何,两台服务器上的应用程序会有所不同,因为外部服务器上的数据访问受限.事实上,这样的事情将会有所不同,我可以将它们视为两个应用程序,因此无需在同一个应用程序中使用两种类型的身份验证.

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

另外还有一个想法 – 有没有办法将足够的AD拉到SQL数据库中,以允许我使用其AD凭证从外部服务器对SQL数据库进行身份验证,而不会产生任何安全问题?我希望我明确打字我在想什么….

再次感谢!

蒂姆

最佳答案
这是我基于this info处理类似情况的方式:

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

基本上发生的一个原因是,当一个未加密的用户访问该站点时,它们被重定向到WinLogin.aspx.由于匿名关闭,集成安全检查.如果通过,您的WinLogin中的自定义代码可以运行.如果集成安全检查失败,则发生401错误.您的自定义401页面重定向到Login.aspx,用户可以使用其用户名和密码与SQL提供程序登录.

转载注明原文:ASP.NET应用程序通过Windows身份验证或表单身份验证向Active Directory或SQL进行身份验证 - 代码日志