使用轉換宣告規則的時機

當您需要將傳入的宣告類型對應到傳出的宣告類型,您可以在 Active Directory 同盟服務 (AD FS) 中使用此規則,然後套用動作,讓此動作根據傳入宣告中的值判斷應該發生何種輸出。 當您使用此規則時,您會根據您在規則中設定的選項之一傳遞或轉換符合下列規則邏輯的宣告,如下表中所述。

規則選項 規則邏輯
傳遞所有傳入宣告 如果傳入宣告類型等於指定的宣告類型,且值等於任何值,則會以宣告類型等於指定宣告類型的傳出宣告傳遞該宣告。
以不同的傳出宣告值取代傳入宣告值 如果傳入宣告類型等於指定的宣告類型,且值等於指定的宣告值,則會以新的傳出宣告值指定的宣告值和傳出宣告類型指定的宣告類型轉換該宣告
以新的電子郵件尾碼取代傳入的電子郵件尾碼 如果傳入宣告類型等於指定的宣告類型,且值等於任何尾碼值,則會以新的傳出宣告值指定的尾碼值和傳出宣告類型指定的宣告類型轉換該宣告

下列章節提供宣告規則的基本介紹,並進一步提供如何使用此規則的詳細資訊。

關於宣告規則

宣告規則表示商務邏輯的執行個體,將會收取傳入宣告,對其套用條件 (若 x 則 y),然後根據條件參數產生傳出宣告。 在您進一步閱讀本主題之前,請先閱讀下列清單,其中會概述關於宣告規則您應該知道的重要秘訣:

  • 在 AD FS 管理嵌入式管理單元中,只能使用宣告規則範本建立宣告規則

  • 宣告規則會從宣告提供者 (例如 Active Directory 或其他同盟服務) 直接處理傳入宣告,或是在宣告提供者信任上從接受轉換規則的輸出處理傳入宣告。

  • 宣告規則的處理方式,是由宣告發行引擎依時間先後順序按照指定的規則集處理。 藉由設定規則優先順序,您可以進一步精簡或篩選由特定規則集內的上一個規則所產生的宣告。

  • 宣告規則範本一律會要求您指定傳入宣告類型。 不過,您可以使用單一規則和同一宣告類型處理多個宣告值。

如需宣告規則和宣告規則集的詳細資訊,請參閱宣告規則的角色。 如需如何處理規則的詳細資訊,請參閱宣告引擎的角色。 如需如何處理宣告規則集的詳細資訊,請參閱宣告管線的角色

傳遞所有宣告值

使用這個動作時,所有做為指定的傳入宣告類型之索引的傳入宣告值,會先對應至指定的傳出宣告類型,然後以傳出宣告傳送至您的同盟服務簽署的權杖。

例如,當規則設定為傳遞所有宣告值選項邏輯,並且指定「群組」傳入宣告類型和「角色」傳出宣告類型,則所有從簽發者傳來的傳入宣告值會個別複製到個別的新傳出宣告,且新宣告為「角色」宣告類型。

轉換宣告

在 AD FS 中,轉換宣告一詞是指將傳入宣告值取代為不同的傳出宣告值。 「轉換傳入宣告」規則讓這個功能得以執行。 在此規則的屬性中,您可以設定條件,根據指定的傳入宣告類型將傳入值轉換為不同的傳出宣告值。

例如在下圖中,規則的條件設定為以不同的傳出宣告值取代傳入的值,所有「群組」傳入宣告類型會對應到新的「角色」傳出宣告類型。 在這個案例中,傳入宣告值 Purchaser 會被新的傳出宣告值 Admin 取代。

when to use a transform

您也可以使用此規則套用條件,將所有具有指定電子郵件尾碼值的傳入宣告以新值取代。 例如,您可以在此規則設定一個條件,將所有尾碼為 sales.corp.fabrikam.com 的宣告值都變更為 fabrikam.com。

在宣告提供者信任上設定這項規則

當您使用宣告提供者信任時,可將此規則設定為將傳入宣告從宣告提供者轉換成可信任的同等項目。 宣告類型或宣告值在您的組織中的意義可以和在宣告提供者組織中不同。 您可以使用此規則將來自宣告提供者的宣告類型和值正規化,使信賴憑證者可以理解提供者傳出宣告的同等項目。

在信賴憑證者信任上設定此規則

當您使用信賴憑證者信任時,可將此規則設定為轉換特定信賴憑證者的宣告。 針對特定信賴憑證者,宣告類型或宣告值可能有不同的意義,此規則可讓您變更單一信賴憑證者的傳出宣告類型和值。

如何建立此規則

若要建立此規則,可以使用宣告規則語言,或使用 AD FS 管理嵌入式管理單元中的轉換傳入宣告規則範本。 這個規則範本提供下列設定選項:

  • 指定宣告規則名稱

  • 將特定傳入宣告類型轉換為指定傳出宣告類型

  • 傳遞所有宣告值

  • 以不同的傳出宣告值取代傳入宣告值

  • 以新的電子郵件尾碼取代傳入的電子郵件尾碼

如需如何建立此範本的詳細資訊,請參閱 AD FS 部署指南中的建立規則以轉換傳入宣告

使用宣告規則語言

如果必須從一個以上的傳入宣告的內容建構傳出宣告,則必須改用自訂規則。 如果傳出宣告的宣告值必須根據傳入宣告值 — 但還有其他內容 — 您也必須在該內容中使用自訂規則。 如需詳細資訊,請參閱 When to Use a Custom Claim Rule

如何建構轉換規則語法的範例

使用宣告規則語言語法來轉換宣告時,可以設定轉換後宣告的屬性為新的常值。 例如,下列規則將角色宣告的值從 "Administrators" 變更為 "root",並同時保留相同的宣告類型:

c:[type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/role", value == "Administrators"]  => issue(type = c.type, value = "root");

規則運算式也可以用於宣告轉換。 例如,以下規則會將 Windows 使用者名稱宣告 DOMAIN\USER 格式中的網域設為 FABRIKAM:

c:[type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"] => issue(type = c.type, value = regexreplace(c.value, "(?<domain>[^\\]+)\\(?<user>.+)", "FABRIKAM\${user}"));

建立自訂規則的最佳做法

可以將宣告轉換選擇性地套用到使用基本篩選功能所選取的宣告。 您可以為篩選所使用的每個宣告屬性指派值,與下列注意事項:

宣告屬性 描述
Type, Value, ValueType 指派最常使用這些屬性。 為了產生轉換後的宣告,至少必須指派類型和值。
Issuer 宣告規則語言允許設定宣告的簽發者 (Issuer),但通常不建議您這麼做。 宣告的簽發者在權杖中不會序列化。 收到權杖時,系統會將所有宣告的 Issuer 屬性設為簽署該權杖之同盟伺服器的識別碼。 因此,在規則中設定宣告的簽發者並不會影響權杖的內容,且一旦宣告封裝在權杖中,設定就會遺失。 設定簽發者唯一有意義的案例,是將簽發者設為宣告提供者規則集中的特定值,並且以參考這個特定值的規則撰寫信賴憑證者規則集。 如果沒有明確將 Issuer 屬性設為宣告規則中的值,宣告發行引擎會將其設為 "LOCAL AUTHORITY"。
OriginalIssuer 和 Issuer 類似,通常不應該為 OriginalIssuer 明確指派值。 不同於 Issuer 的是,OriginalIssuer 屬性會在權杖中序列化,但是權杖取用者期望的是,如果有設定 OriginalIssuer,它會包含原始簽發宣告之同盟伺服器的識別碼。
屬性 如上一節所述,在權杖之中不會保留宣告的屬性包,因此,只有當後續的本機原則會參考儲存在屬性內的資訊時,才應該指派屬性。

如需如何使用宣告規則語言的詳細資訊,請參閱宣告規則語言的角色