繁体   English   中英

通过ASP.NET访问Active Directory记录

[英]Accessing Active Directory Records Via ASP.NET

好像我的本地计算机没有将数据写入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();
}

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

最简单的方法是:

  1. 创建一个新的域用户帐户
  2. 将其添加到“域管理员”组
  3. 在您的iis服务器中,找到应用程序使用的池,并将池标识更改为新创建的用户

这样,从用户到iis的所有请求都在域管理员的上下文中运行,因此从iis到AD的所有请求都将成功 - 域管理员可以操作AD。

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

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

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

  1. 要求用户登录ASP.NET应用程序。
  2. 在执行需要该访问权限的Active Directory部分时,让您的代码模拟当前登录的用户。

根据您使用的ASP.NET版本,可能会略有不同,但基本上......

步骤1

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

<configuration>
  ...
  <system.web>
    ...
    <authentication mode="Windows" />
    ...
  </system.web>
  ...
</configuration>

默认情况下,ASP.NET应该已经知道在配置为Windows身份验证时如何与Active Directory通信,因此不需要其他任何内容,但如果您发现需要单独的角色提供程序 ,请随意使用我们使用的那个 (我们也有说明 。)但是,你不应该需要它。

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

第2步

现在您已经过身份验证的用户,您可以通过编程方式模拟它们。 以下内容适用于在代码中模拟身份验证用户

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文章如何:在ASP.NET 2.0中使用Windows身份验证中详细记录

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM