如何查询活动目录用户帐户的委派属性?

时间:2010-05-05 21:42:39

标签: active-directory

我正在编写一个实用程序来审核WCF服务的配置。为了从客户端正确传递凭据,通过WCF服务返回SQL后端,必须在Active Directory中配置用于运行服务的域帐户,并设置“信任此用户以进行委派”(属性 - >“代表团“标签”。

使用C#,如何在Active Directory中访问此选项卡上的设置。我花了最后5个小时尝试在网上跟踪这个,似乎无法找到它。

这是我到目前为止所做的:

using (Domain domain = Domain.GetCurrentDomain())

{     Console.WriteLine(domain.Name);

// get domain "dev" from MSSQLSERVER service account
DirectoryEntry ouDn = new DirectoryEntry("LDAP://CN=Users,dc=dev,dc=mydomain,dc=lcl");
DirectorySearcher search = new DirectorySearcher(ouDn);

// get sAMAccountName "dev.services" from MSSQLSERVER service account
search.Filter = "(sAMAccountName=dev.services)";
search.PropertiesToLoad.Add("displayName");
search.PropertiesToLoad.Add("userAccountControl");

SearchResult result = search.FindOne();
if (result != null)
{
    Console.WriteLine(result.Properties["displayName"][0]);
    DirectoryEntry entry = result.GetDirectoryEntry();

    int userAccountControlFlags = (int)entry.Properties["userAccountControl"].Value;
    if ((userAccountControlFlags & (int)UserAccountControl.TRUSTED_FOR_DELEGATION) == (int)UserAccountControl.TRUSTED_FOR_DELEGATION)
        Console.WriteLine("TRUSTED_FOR_DELEGATION");
    else if ((userAccountControlFlags & (int)UserAccountControl.TRUSTED_TO_AUTH_FOR_DELEGATION) == (int)UserAccountControl.TRUSTED_TO_AUTH_FOR_DELEGATION)
        Console.WriteLine("TRUSTED_TO_AUTH_FOR_DELEGATION");
    else if ((userAccountControlFlags & (int)UserAccountControl.NOT_DELEGATED) == (int)UserAccountControl.NOT_DELEGATED)
        Console.WriteLine("NOT_DELEGATED");

    foreach (PropertyValueCollection pvc in entry.Properties)
    {
        Console.WriteLine(pvc.PropertyName);
        for (int i = 0; i < pvc.Count; i++)
        {
            Console.WriteLine("\t{0}", pvc[i]);
        }
    }

}

}

“userAccountControl”似乎不是正确的属性。我认为它与“帐户”标签上的“帐户选项”部分相关联,这不是我们想要的,但这是我到目前为止最接近的。

所有这一切的理由是:我们无权在质量保证或生产中设置服务,因此连同我们的书面说明(众所周知,仅部分遵循)我正在创建一个审核设置的工具(WCF和SQL)确定设置是否正确。这将允许部署服务的人员运行此实用程序并验证所有设置是否正确 - 节省了数小时的麻烦并减少了部署期间的停机时间。

2 个答案:

答案 0 :(得分:2)

可能太晚了,但是......发现它,所以我想我会分享它。

有问题的属性称为“msDS-AllowedToDelegateTo”,它仅出现在具有已配置SPN值的帐户中,但它为您提供了一个完整的列表,列出了您的对象受委托的所有服务。

希望这可以节省其他人必须阅读kerberos规范几个小时。

答案 1 :(得分:1)

好的,我错了。当我第一次运行它时,userAccountControl没有设置TRUSTED_FOR_DELEGATION。我不知道这是否是一个缓存问题。我添加了:

entry.RefreshCache(new string [] {“userAccountControl”});

确保它不缓存该值。我不知道这是否有效,但为了以防万一我添加了它。