共用方式為


HOW TO:使用信任

下列類別與列舉可搭配 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.

Copyright © 2008 by Microsoft Corporation.All rights reserved.