0

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

我找到的最近的代码来自微软:

如何使用表单身份验证和 Visual Basic .NET 针对 Active Directory 进行身份验证

当我使用 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 数据库进行身份验证。

4

2 回答 2

0

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

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

在此处输入图像描述

如果您需要了解您的网站正在使用哪个应用程序池,请查看该网站的高级设置。

于 2014-09-15T20:12:41.607 回答
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 语句之前清理数据库代码。

注意:工作进程必须有权模拟其他用户,否则这将不起作用。

于 2014-09-16T01:09:04.580 回答