使用没有asp成员身份的活动目录的表单身份验

时间:2014-09-15 19:47:59

标签: asp.net iis active-directory forms-authentication integrated-pipeline-mode

我正在尝试让用户输入他们的域登录详细信息,因此该站点可以获取组列表以确定要连接的数据库。

我找到的最近的代码来自microsoft:

How to authenticate against the Active Directory by using forms authentication and Visual Basic .NET

因为我正在使用IIS8,ASP 4.5代码在web.config中引用

失败
       <identity impersonate="true" />


HTTP Error 500.24 - Internal Server Error

An ASP.NET setting has been detected that does not apply in 
Integrated managed pipeline mode.

好的,所以我删除了这个条目,并对我的域进行了身份验证,但是当它重定向时出现了相同的登录页面,我认为没有任何东西告诉它模仿。

进一步挖掘似乎我可能无法使用此代码,因为它不支持托管管道模式。我不想使用asp成员资格来使用域组来验证权限。

帮助!

想要保持集成的托管,并使用ASP.Net模拟,这样我就可以使用经过身份验证的广告用户对sql数据库进行身份验证。

2 个答案:

答案 0 :(得分:0)

在IIS中为每个应用程序池设置托管管道模式。默认情况下,它设置为集成模式。

您可以将其更改为经典模式。使用“编辑应用程序池”对话框设置该模式,当您在IIS管理器中右键单击应用程序池并选择“基本设置”时,该对话框将打开:

enter image description here

如果您需要找出您的网站使用的应用池,请查看该网站的高级设置。

答案 1 :(得分:0)

在集成模式下不允许模拟的原因是它与异步操作冲突,因为操作可以作为一个用户启动并以另一个用户结束......这会让人非常困惑。

执行所需操作的一种方法是使用WindowsImpersonationContext。假设您正在使用Windows身份验证:

WindowsIdentity id = (WindowsIdentity)Context.User.Identity;

// impersonation is automatically undone by
// WindowsImpersonationContext.Dispose()
using (WindowsImpersonationContext wic = id.Impersonate())
{
    // log into your database, do your queries, then cleanup
}

这里的缺点是你不能让连接在响应的生命周期中保持打开状态,或者更长时间......这可能是一件好事......你需要在退出using语句之前清理数据库代码。

注意:工作进程必须具有模仿其他用户的权限,否则这将无效。