宣告引擎的角色
在其最高的層級,Active Directory 同盟服務 (AD FS) 中的宣告引擎是規則式引擎,專門用來提供和處理同盟服務的宣告要求。 宣告引擎是同盟服務內負責跨所有已設定的同盟信任關係執行每個規則集,並將輸出結果傳遞至宣告管線的唯一實體。
雖然宣告管線是流程宣告端對端程序的更邏輯概念,宣告規則是實際系統管理元素,可讓您用來自訂宣告在宣告規則執行程序期間的流程。 如需管線處理程序的詳細資訊,請參閱 The Role of the Claims Pipeline。
如下圖所示,在您組織中對所有的同盟信任關係透過宣告規則接受連入宣告 (接受規則)、授權宣告要求者 (授權規則) 以及發行連出宣告 (發行規則) 的動作是由宣告引擎執行。
宣告規則執行處理程序
在您的組織中設定宣告提供者信任或信賴憑證者信任的宣告規則時,透過叫用宣告引擎以在宣告規則中套用必要的邏輯來判斷是否要發出任何宣告,以及要發出的宣告,該信任的宣告規則集可作為連入宣告的閘道管理員。
下一節將概述宣告流程行經宣告規則執行處理程序期間引擎所發生的每個步驟。 如下所述的每一個步驟,會發生在宣告管線處理程序中所述的每個階段。 這些步驟包括:
步驟 1 - 初始化
步驟 2 - 執行
步驟 3 – 執行結果
如需管線處理程序的詳細資訊,請參閱 The Role of the Claims Pipeline。
步驟 1 - 初始化
在宣告規則執行的處理程序的第一個步驟中,宣告引擎會藉由先將連入宣告新增至輸入宣告集來接受連入宣告。 輸入宣告集類似於記憶體中的快取,僅用來暫時儲存資料,只要必要的處理程序需要讓該資料可供擷取。 在規則執行完成之後會捨棄輸入宣告集的資料。
新增宣告至規則集的輸入宣告集
輸入宣告集是由宣告引擎建立,當它處理與宣告規則集相關聯的邏輯時,它需要暫時將宣告資料儲存在記憶體中。 宣告引擎會複製所有連入宣告至輸入宣告集,在此處它們可由規則集中的第一個規則擷取。
例如,在下圖中,宣告引擎會從傳入宣告讀取 A 和 B 的宣告,並將其複製到輸入宣告集。 它們位於輸入宣告集之後,宣告引擎會擷取並將 A 和 B 的宣告處理做為宣告規則集中的第一個規則的邏輯的輸入。
宣告規則集中的所有規則都共用相同的輸入的宣告集。 該集中的每個規則可以新增至共用的輸入宣告集,因此會影響集內所有後續的規則。
步驟 2 - 執行
在宣告規則處理程序的此步驟中,宣告規則是在宣告引擎在特定的規則集內一次一個、依時間先後順序逐步執行所有規則時處理。 規則集中的每個規則只會執行一次,並且依出現在 AD FS 管理嵌入式管理單元的 [編輯宣告規則] 對話方塊中從上到下顯示的順序執行。 在規則集頂端的宣告規則最先處理,然後處理後續的規則,直到執行所有規則為止。
如宣告規則語言所定義,宣告規則包含兩個部分,條件及發行陳述式。 宣告引擎會先處理條件部分,方法是使用輸入宣告集中的資料來判斷對輸入宣告集裡包含的宣告而言,規則內指定之條件是否為 true (符合規則條件的宣告稱為相符的宣告)。 如果找不到任何相符的宣告,宣告引擎會對每一組相符的宣告的規則執行發行陳述式。 規則的發行陳述式可以對相符的宣告執行下列其中一項工作:
將相符的宣告複製到輸出宣告集
轉換宣告欄位並在輸入宣告集或同時在評估與輸出宣告集中建立新宣告。
使用相符的宣告做為金鑰,從屬性存放區查閱的詳細資訊,以只在輸入宣告集或同時在輸入和輸出宣告集建立新的宣告。
新增宣告至規則集的輸出宣告集
輸出宣告集是記憶體中的位置,最初是空的並且很重要,因為在執行程序完成之後,宣告引擎只會傳回位於輸出宣告集中的宣告。 這表示計算最終的連出宣告集合時,將會忽略僅位於輸入宣告但不在輸出宣告集的任何宣告集。
新增宣告至規則集的兩個宣告集
處理規則時,根據規則的發行陳述式中使用的陳述式,宣告會被新增至輸入宣告集或同時新增至輸入宣告集和輸出宣告集。 宣告規則語言將這些陳述式稱為 add 或 issue。
如果使用 add 陳述式,宣告僅會新增至輸入宣告集,而宣告將僅針對執行目的存在,並且於執行完成之後會中止存在。 如果使用 issue 陳述式,宣告會同時新增至輸入宣告集和輸出宣告集,而執行完成之後,宣告將會傳回輸出宣告集。 如需這些陳述式的詳細資訊,請參閱 The Role of the Claim Rule Language。
如果規則集內的規則的條件部分不符合輸入宣告集中的任何宣告,則會忽略規則中的發行陳述式部分,並因此不會新增任何宣告至輸出宣告集或輸入宣告集。 下圖和相對應的步驟會顯示宣告引擎會執行轉換規則時發生的事情:
連入宣告會新增至宣告引擎所設定的輸入宣告。
第一項規則執行時,它會查看 A 和 B 宣告,也就是在該時間點輸入宣告集中的唯一宣告,並處理規則 1 規則邏輯的條件部分。
由於 A 宣告出現在輸入宣告集,規則的條件判斷為 true (符合宣告 A),而新的宣告 C 會同時新增至輸入宣告集和輸出宣告集。
規則 2 現在可以使用 A、B 和 C 宣告 (所有宣告在輸入的宣告集中) 做為處理其邏輯的輸入。
如需宣告轉換的詳細資訊,請參閱 When to Use a Transform Claim Rule。
步驟 3 – 執行結果
一旦指定規則集內的所有規則已執行,並且最後一組宣告出現在輸出宣告集中,宣告規則集執行的最後階段會開始。 此時,宣告引擎會傳回輸出宣告的內容做為規則集執行的輸出。 從這一點開始,宣告管線將接手並將此最終輸出移至其處理程序的下一個階段。
傳送執行輸出到宣告管線
當宣告引擎處理規則集時,該規則集在記憶體中有自己專用的位置,用於輸入和輸出宣告集。 這表示一個規則集所使用的輸入和輸出宣告集與另一個規則集中使用的輸入和輸出宣告集是分開的。
為規則集執行整個程序 (步驟 1、2 和 3) 之後,新發行的傳出宣告 (輸出宣告集的內容) 將做為宣告管線中的下一個規則集的輸入。 這允許宣告從一個規則集的輸出流動到另一個規則集的輸入,如下圖所示。
注意
雖然發行規則集也是管線中的重要階段,但為了簡化圖解,上圖中未加以顯示。 如需示範發行規則集以及它如何融入宣告管線的圖解,請參閱 The Role of the Claims Pipeline。
在此情況下,接受規則的輸出是由管線用來流動接受規則產生的最後一組宣告到管線中的第二個階段,即授權規則的處理。 此時,整個宣告規則執行程序 (上述的步驟 1、2 和 3) 會為授權規則集重新執行一次。 這個循環會持續,直到規則集 (在管線中的最後階段) 的發行已完成。
一旦最終的連出宣告已從發行規則集的引擎傳回,會將它們封裝到 SAML 權杖,而同盟服務會傳送權杖回用戶端。
處理授權規則
如果在宣告規則集執行處理程序的步驟 2 中執行的宣告規則集包含授權規則 (較接受或發行規則有不同的輸入和輸出宣告集),則將會執行這些授權規則,以判斷是否授權權杖要求者基於要求者的宣告從同盟服務取得指定信賴憑證者的安全性權杖。
授權規則的目標是要根據使用者是否獲允許取得指定信賴憑證者的權杖來發行允許或拒絕宣告。 如下圖所示,授權執行的輸出是由管線用來判斷是否執行發行規則集 - 根據允許和/或拒絕宣告存在與否 - 但授權執行輸出本身不會用作宣告規則集的輸入。
如需宣告授權的詳細資訊,請參閱 When to Use an Authorization Claim Rule。