【问题标题】:Form authentication based using active directory without asp membership基于使用活动目录的表单身份验证,没有 asp 成员资格
【发布时间】:2014-09-15 19:47:58
【问题描述】:

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

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

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

【问题讨论】:

  • 我不太清楚你想要完成什么。模拟通常仅在您需要将 IIS 工作进程作为用户凭据运行时使用(例如,如果您想以该用户身份访问网络资源)。除非绝对必要,一般不推荐。您能否详细解释一下您的要求...“获取组列表以确定要连接的数据库”相当模糊..
  • @nick 你不能使用 Windows 身份验证代替 Forms 身份验证吗?然后使用 Page.User.Identity 在 System.DirectoryServices 中进行查找
  • 我一直在使用 windows 身份验证,因为这是一个 Intranet 应用程序,但我需要在 Internet 上提供此功能,因此查看表单身份验证以获取 windows 用户。

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


【解决方案1】:

在集成模式下不允许模拟的原因是它与异步操作冲突,因为操作可以作为一个用户开始并作为另一个用户结束......这会变得非常混乱。

一种方法是使用 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 语句之前清理数据库代码。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 对不起,我应该说我需要集成模式。
    • 为新应用程序推荐经典模式不是一个好的选择,因为经典模式可能会在未来的 IIS 版本中消失。最好以集成模式开发新应用。
    猜你喜欢
    • 2012-08-12
    • 2015-10-26
    • 2014-12-25
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多