我正在编写一个需要多种身份验证形式的应用程序.
应用程序需要支持对Active Directory的身份验证,但如果用户不在Active Directory中,则能够故障回复到SQL成员资格提供程序.我们可以根据提供的用户名处理代码中SQL提供程序的失败,因为用户名将是与Active Directory用户名不同的格式.
这甚至可能吗?我的意思是,我可以使用成员资格并同时使用ActiveDirectoryMembershipProvider和SqlMembershipProvider,还是我必须自己动手?
另一个额外增加的复杂性是我希望自动将基于Windows身份验证的内部用户验证回AD,但对不在我们内部网络上的用户或使用SQL提供程序的用户使用表单身份验证.
这些很可能是单独的服务器,一个是内部服务器,另一个是外部服务器,因此我有很多计划要弄清楚数据复制,以及如果AD用户访问外部服务器等,我将如何对其进行身份验证.
当我开始走这条路时,我想知道那里有什么想法.如果没有我自己的想法,我想要做什么,或者有没有办法将它们融合在一起?
谢谢回复.
我最初问的原因是因为我能够在大约7年前使用IIS进行身份验证,然后将凭据传递回Lotus Domino Server Web App,从而使这个特定的senerio工作.如果用户未通过Windows身份验证/ ISS进行身份验证,则Domino将处理身份验证.这就是我在这里要做的事情,但实在想不出让它在IIS中运行的方法.
至于你的其他答复,我认为你正在采取我需要采取的方式.我已经想到了这一点,并把它扔在了我脑海里.无论如何,应用程序在两台服务器上会有所不同,因为无论如何都会限制对外部服务器上的数据的访问.事实上,这种情况将会有所不同,我可能只将它们视为两个应用程序,从而无需在同一个应用程序中使用两种类型的身份验证.
我正在尝试为外部服务器编写自己的身份验证/登录窗口,如果用户尝试使用外部服务器上的AD凭据登录,我将能够检测到并将其重定向到内部服务器.如果他们不在本地网络或VPN上,他们将无法访问.这部分仍然有一些思考过程,所以我不确定.
另外一个想法 - 是否有一种方法可以将足够的AD拉入SQL数据库,以允许我使用其AD凭据从外部服务器对SQL数据库的用户进行身份验证,而不会产生任何安全问题?我希望我能清楚地输入我在想的内容......
再次感谢!
蒂姆
这是我基于这个信息处理类似情况的方式:
配置应用程序以使用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提供程序的用户名和密码登录.