通过ASP.NET访问Active Directory记录

时间:2014-02-23 09:10:59

标签: c# asp.net active-directory windows-authentication

好像我的本地计算机没有将数据写入Active Directory所需的权限。我可以读取数据但无法更改和更新。在调用.save()命令时,我收到下一条消息:“访问被拒绝”。

我没有使用任何登录详细信息来登录Active Directory,我也不希望使用任何登录。我知道它通常与应用程序池和IIS有关,但除了尝试和更改一些次要选项和功能外,我似乎无法找到可行的解决方案。

编辑: 这是我正在尝试执行的代码:

using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "DOMAINANME"))
{
    GroupPrincipal group = new GroupPrincipal.FindByIdentity(pc, "GROUPNAME");
    group.Members.Remove(pc, IdentityType.SamAccountName, "USERNAME");
    group.Save();
}

2 个答案:

答案 0 :(得分:5)

您的直觉是正确的 - 您需要对应用程序池帐户拥有适当的权限。

最简单的方法是:

  1. 创建新的域用户帐户
  2. 将其添加到“域管理员”组
  3. 在您的iis服务器中,找到您的应用程序使用的池,并将池标识更改为新创建的用户
  4. 这样,用户对iis的所有请求都在域管理员的上下文中运行,因此从iis到AD的所有请求都将成功 - 域管理员可以操作AD。

    虽然上述解决方案可行,但可能不推荐。这是因为应用程序除了连接到AD之外还执行许多其他操作,如果有可能被滥用的地方,则可能会在域管理上下文中运行不需要的请求。

    通常情况下,这样的应用程序将具有两个层,前层和后层。前层在受限制的上下文中运行,并负责所有用户请求。这是你的申请。后备层是另一个 Web应用程序,无法从Internet访问,只能从本地Intranet访问。此应用程序在域管理上下文中运行,并充当AD的网关。前端应用程序使用后端应用程序与AD通信。

答案 1 :(得分:4)

要执行需要Active Directory特定权限的代码,请按以下步骤操作:

  1. 要求用户登录ASP.NET应用程序。
  2. 在执行需要该访问权限的Active Directory部分时,让您的代码模拟当前登录的用户。
  3. 根据您使用的ASP.NET版本,可能会略有不同,但基本上......

    第1步

    对于用户登录,只需使用标准的ASP.NET身份验证配置即可。因为它是最容易配置的(并且只适用于AD),我将在此处记录Windows身份验证。这将提示用户使用标准Windows登录对话框 - 他们需要输入域凭据。要配置应用程序,请对Web.config

    进行以下更改
    <configuration>
      ...
      <system.web>
        ...
        <authentication mode="Windows" />
        ...
      </system.web>
      ...
    </configuration>
    

    默认情况下,ASP.NET应该已经知道在配置为Windows身份验证时如何与Active Directory通信,因此不需要其他任何内容,但如果您发现需要单独的角色提供程序,随意采取the one we use。 (我们也有instructions。)但同样,你不应该需要它。

    编辑:您还需要确保使用inetmgr.exe配置IIS以禁止对应用程序进行匿名访问。否则,它将永远不会提示用户登录。我们通常会禁用匿名访问并启用 Windows 基本身份验证 - 因为我们需要支持不支持NTLM的浏览器。

    第2步

    现在您已经过身份验证的用户,您可以通过编程方式模拟它们。以下内容改编自Impersonating the authenticating user in code

    System.Security.Principal.WindowsImpersonationContext impersonationContext;
    impersonationContext = ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();
    
    try
    {
        // Do your writing to the AD here
    }
    finally
    {
        impersonationContext.Undo();
    }
    

    我也刚刚发现(在搜索此答案的参考链接时)这些都在MSDN文章How To: Use Windows Authentication in ASP.NET 2.0

    中有详细记录。

    让我们知道它是怎么回事: - )