【问题标题】:Trying to impersonate another user to update Active Directory试图冒充另一个用户来更新 Active Directory
【发布时间】:2013-04-29 20:57:35
【问题描述】:

我有一个 C# 应用程序,我试图通过模拟另一个用户来更新 AD。

我正在阅读广告,以便让用户更新非关键字段,例如任何广告帐户的电话号码。为此,我们创建了一个具有更新任何 AD 条目权限的新用户。我通过以他的身份登录我的机器并以他的身份启动程序来验证用户的权限,并且我可以更新任何用户的条目。

我正在使用Uwe Keim's Impersonator class,并且模拟似乎成功发生,即没有例外。

但是,测试表明我实际上仍在使用我自己的登录用户来更新 AD,尽管是模拟的。我可以很好地更新我自己的 AD 条目,但既不是模拟用户的也不是任何其他 AD 条目。所以看起来根本没有冒充发生?

我尝试验证 Impersonator 是否确实尝试使用错误的凭据进行任何操作,并收到相应的错误消息作为回报。因此,用户凭据是正确的,并且实际上已针对 AD 进行了检查。

这是我的相关代码,不相关或敏感部分被 [...] 涂黑:

private void SaveToAD()
{
    try
    {
        [...]
        using (new Impersonator(@"<user>", @"<domain>", @"<password>"))
        {
            foreach ([...])
            {
                DirectoryEntry entry = [...];

                entry.Properties[...].Value = [...];
                entry.CommitChanges();
            }
        }
        [...]
    }
    catch (UnauthorizedAccessException ex)
    {
        // Handling
    }
    catch (Win32Exception ex)
    {
        // Handling
    }
    finally
    {
        Cursor = Cursors.Arrow;
    }
}

谁能告诉我出了什么问题或指点我一个方向?

【问题讨论】:

    标签: c# .net active-directory impersonation


    【解决方案1】:

    为什么不直接使用 DirectoryEntry 构造函数作为您要模拟的用户建立您的 ADSI 连接(假设您有他们的凭据)。

    例如

            using (var dirRoot = new DirectoryEntry("LDAP://cn=user object, dc=domain, dc=com", @"<domain>\<user>", "<password>"))
            {
                dirRoot.Properties["l"].Value = "yada";
                dirRoot.CommitChanges();
            }
    

    【讨论】:

    • 我没有所有用户的凭据,只有一个用户有权更新任何其他用户的数据。
    • 这应该就是你所需要的。如果您拥有“上帝”帐户的凭据,请在 DirectoryEntry 的构造函数中提供它们以建立对象的安全上下文。然后,您可以进行所有您想要的更改。我希望你有一个很好的机制来安全地存储你的二级\上帝帐户的凭据。
    • 我正在通过 SearchResult.GetDirectoryEntry() 从搜索中获取我的 DirectoryEntry 项目,所以我认为我不能以这种方式实例化它们。
    • 您应该能够将 DirectoryEntry 指定为 DirectorySearcher 的搜索根。只需在实例化 DirectoryEntry 根目录时设置凭据。
    • 就是这样,谢谢!现在我什至不再需要 Impersonator 类了。
    猜你喜欢
    • 2023-03-26
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    相关资源
    最近更新 更多