如何:使用信任

以下的类和枚举用于 Active Directory 域服务信任。

以下几节说明如何使用 System.DirectoryServices.ActiveDirectory 命名空间来使用 Active Directory 域服务信任。

信任方向

信任方向由 TrustDirection 枚举的成员表示。信任方向始终是相对于信任的单方。例如,如果域 A 具有与域 B 的入站信任关系,则域 B 具有与域 A 的出站信任关系。

创建信任

创建信任分为两个步骤。普通事件序列是先创建信任关系的一方,再创建信任的另一方。在信任的双方都已创建后,即建立了信任。在创建信任方时,信任关系的每一方都要求相同的密码。

对于域信任,使用 CreateTrustRelationship 方法通过单个方法调用以编程方式创建信任关系的双方。此方法将创建和使用密码来建立信任。CreateTrustRelationship 方法用于对林信任执行相同的操作。

CreateLocalSideOfTrustRelationship 方法用于只创建域信任关系的一方。调用方必须提供相同的密码来调用信任的双方,以建立信任。该密码只用于创建信任,与任何帐户密码无关。要令此方法成功,信任方向在两个调用中必须都是正确的。如果信任的一方是通过编程方式创建的,而另一方是手动创建的,则此方法很有用。此方法还可以用于在不同时间以编程方式创建信任的双方。CreateLocalSideOfTrustRelationship 方法用于对林信任执行相同的操作。

获取有关信任的信息

对于域信任,GetTrustRelationship 方法用于获取表示两个域之间的信任的 TrustRelationshipInformation 对象。GetAllTrustRelationships 方法用于获取一个 TrustRelationshipInformationCollection 对象,该对象包含域所建立的所有信任。GetTrustRelationshipGetAllTrustRelationships 方法用于对林信任执行相同的操作。

验证信任

对于域信任,VerifyTrustRelationshipVerifyOutBoundTrustRelationship 方法用于验证两个域之间的现有信任是否有效。VerifyOutBoundTrustRelationship 方法仅用于验证出站信任,VerifyOutBoundTrustRelationship 方法可用于验证任何类型的信任。VerifyTrustRelationshipVerifyOutBoundTrustRelationship 方法用于对林信任执行相同的操作。如果无法验证现有信任,则所有这些方法都将引发 ActiveDirectoryObjectNotFoundException 异常。

以下 C# 示例说明如何枚举域的信任并验证是否已完全建立每个信任。

static void EnumAndVerifyDomainTrusts(
    Domain ___domain, 
    NetworkCredential targetCredentials)
{
    TrustRelationshipInformationCollection trusts;
    trusts = ___domain.GetAllTrustRelationships();

    foreach (TrustRelationshipInformation trust in trusts)
    {
        Console.WriteLine(
            String.Format("Trust between {0} and {1}:",
            trust.SourceName,
            trust.TargetName));
        
        Console.WriteLine(
            String.Format("\tTrust type: {0}",
            trust.TrustType.ToString()));
        
        Console.WriteLine(
            String.Format("\tTrust direction: {0}",
            trust.TrustDirection.ToString()));

        // Verify that the trust has been fully established.
        DirectoryContext context = new DirectoryContext(
            DirectoryContextType.Domain,
            trust.TargetName, 
            targetCredentials.UserName,
            targetCredentials.Password);
        Domain targetDomain = Domain.GetDomain(context);
        Console.WriteLine(targetDomain.Name);

        try
        {
            ___domain.VerifyTrustRelationship(
                targetDomain, 
                trust.TrustDirection);

            Console.WriteLine("Trust verified.");
        }
        catch (ActiveDirectoryObjectNotFoundException)
        {
            // The trust was not verified.
            Console.WriteLine("Trust not verified.");
        }
    }
}

删除信任

一旦删除了信任关系的一方,该信任即不再存在。对于域信任,DeleteLocalSideOfTrustRelationship 方法用于删除信任的单方。DeleteTrustRelationship 方法用于通过单个方法调用删除信任的双方。DeleteLocalSideOfTrustRelationshipDeleteTrustRelationship 方法用于对林信任执行相同的操作。

有选择性的身份验证

如果您决定对入站林信任设置 SetSelectiveAuthenticationStatus,则必须将对每个域和资源的权限手动分配给您希望具有访问权的第二个林中的用户。为此,设置“允许”控制访问权限,以便对第二个林中该特定用户或组的对象进行身份验证。

当用户对启用了 GetSelectiveAuthenticationStatus 选项的信任进行身份验证时,其他组织安全 ID (SID) 将添加到用户的授权数据中。此 SID 将提示对资源域进行检查,以确保用户能够对特定服务进行身份验证。对用户进行了身份验证后,如果其他组织 SID 不存在,则用户对其进行身份验证的服务器将添加此组织 SID。在进行了身份验证的用户的上下文中,只能存在一个这样的特殊 SID。

SID 筛选

通过 SID 筛选,管理员可使给定域中的域控制器“隔离”被信任域。这将导致,信任域中的域控制器可以从被信任域收到的所有授权数据中,删除与该域不相关的所有 SID。隔离从信任域执行,然后一个域一个域地完成。

SID 筛选阻塞 Windows 2000 可传递的信任。如果被隔离的域位于两个域之间的信任路径中,则来自被隔离域的另一方的域用户将无法访问隔离域中的资源。因此,被隔离域应是叶域,其子域只应是不包含任何用户帐户的资源域,或者被隔离域位于不同的林中。

Windows 2000 管理员不应使用 SID 筛选功能在林中创建“访问受限的”域。推荐的隔离方案是只隔离单独林中的域。应该按照从将要被保护的域到将要被隔离的域的方向建立信任,然后配置信任域,从被信任域筛选 SID。

Send comments about this topic to Microsoft.

版权所有 © 2008 Microsoft Corporation。保留所有权利。