理賠引擎的角色
在最高層級上,Active Directory 同盟服務 (AD FS) 中的宣告引擎是以規則為基礎的引擎,專門用來服務及處理同盟服務的宣告要求。 宣告引擎是同盟服務內唯一的實體,負責跨您已設定的所有同盟信任關係執行每個規則集,並將輸出結果交給宣告管線。
雖然宣告管線是一個用來處理宣告的端對端過程的邏輯概念,但宣告規則是實際的管理元素,您可以在宣告規則執行過程中用來自訂宣告流程。 如需了解管道流程的詳細資訊,請參閱 索賠流程的重要性。
如下圖所示,接受傳入宣告(接受規則)、授權宣告要求者(授權規則)和透過組織中所有同盟信任關係中的宣告規則發出傳出宣告(發行規則)的行為是由宣告引擎執行。
理賠規則執行流程
當您使用宣告規則在組織中設定宣告提供者信任或信賴憑證者信任時,該信任的宣告規則集(s)會藉由叫用宣告引擎,在宣告規則中套用必要的邏輯,以判斷是否要發出任何宣告和要發出的宣告,作為傳入宣告的網關守衛。
下一節概述引擎在宣告流程期間透過宣告規則執行程式所發生的每個步驟。 在宣告處理流程中所述的每個階段,以下每個步驟都會發生。 這些步驟包括:
步驟 1 – 初始化
步驟 2 – 執行
步驟 3 – 執行結果
如需管道流程的詳細資訊,請參閱 請求管道的角色。
步驟 1 – 初始化
在宣告規則執行程式的第一個步驟中,宣告引擎會先將它們新增至 輸入宣告集,以接受連入宣告。 輸入宣告集類似於記憶體中用來暫時儲存數據的快取,只要必要的進程要求讓數據可供擷取即可。 在規則執行完成後,將會捨棄輸入索賠集數據。
將宣告新增至規則集的輸入宣告集
輸入宣告集是由宣告引擎在處理與宣告規則集相關聯的邏輯時,需要暫時將宣告數據儲存在記憶體中時所建立。 宣告引擎會將所有傳入宣告複製到輸入宣告集,讓規則集中的首個規則可以擷取這些宣告。
例如,在下圖中,宣告引擎會從連入宣告讀取 A 和 B 的宣告,並將其複製到輸入宣告集。 當宣告加入輸入宣告集後,宣告引擎會擷取並處理宣告 A 和 B,將它們作為宣告規則集第一個規則中邏輯的輸入。
宣告規則集中的所有規則都會共用相同的輸入宣告集。 該集合中的每個規則都可以新增至共用輸入宣告集,從而影響集合中的所有後續規則。
步驟 2 – 執行
在宣告規則程式的此步驟中,宣告規則會在宣告引擎依時間順序逐步執行特定規則集內的所有規則時處理。 規則集中的每個規則只會執行一次,並且會依它們從上到下顯示的順序執行,如 AD FS 管理嵌入式管理單元的 [編輯宣告規則] 對話框所顯示。 位於規則集頂端的宣告規則會首先被處理,接著處理後續的規則,直到所有的規則都已執行完畢。
如宣告規則語言所定義,宣告規則包含兩個部分:條件和發行語句。 宣告引擎會先使用輸入宣告集中的數據來處理條件部分,以確定輸入宣告集中所含的宣告是否符合規則中指定的條件(符合規則條件的宣告稱為匹配的宣告)。 如果找到任何相符的宣告,宣告引擎會針對每個相符宣告集執行規則的發行語句。 規則的發行語句可以使用相符的宣告來執行下列任一工作:
將相符的宣告複製到輸出宣告集
轉換宣告欄位,並只針對輸入宣告集或在評估和輸出宣告集中建立新的宣告。
使用比對宣告做為索引鍵來查閱屬性存放區中的詳細資訊,以在輸入宣告集或輸入和輸出宣告集中建立新的宣告。
將放在規則集中的輸出宣告集合中新增一個宣告
輸出宣告集是記憶體中一開始空白的位置,而且很重要,因為宣告引擎只會傳回在執行程式完成之後位於輸出宣告集中的宣告。 這表示任何只位於輸入宣告集中且不在輸出宣告集中的宣告,在計算最後一組傳出宣告時,將會忽略這些宣告。
將索賠新增至一個規則集中的兩個索賠集
處理規則時,宣告會新增至輸入宣告集,或是根據規則發行語句中使用的語句,在輸入宣告集和輸出宣告集中新增宣告。 宣告規則語言會將這些語句稱為 新增 或 發出。
如果使用 add 語句,則宣告只會新增至輸入宣告集,而且宣告只會針對執行的目的而存在,而且在執行完成之後便停止存在。 如果使用 issue 語句,宣告會同時新增至輸入宣告集和輸出宣告集,而且在執行完成之後,就會在輸出宣告集中傳回宣告。 如需這些語句的詳細資訊,請參閱 宣告規則語言的角色。
如果規則集內規則的條件部分不符合輸入宣告集中的任何宣告,則會忽略規則的發行語句部分,因此不會將任何宣告新增至輸出宣告集或輸入宣告集。 下圖和對應的步驟顯示宣告引擎執行轉換規則時會發生什麼情況:
傳入宣告會新增至宣告引擎所設定的輸入宣告。
當第一個規則執行時,它會看到 A 和 B 宣告,也就是當時輸入宣告集中唯一的宣告,並在規則 1 中處理規則邏輯的條件部分。
由於 A 宣告存在於輸入宣告集中,因此規則的條件會判斷為 true(符合宣告 A),並將新的 C 宣告新增至輸入宣告集和輸出宣告集。
規則 2 現在可以使用 A、B 和 C 宣告(輸入宣告集中的所有宣告)作為處理其邏輯的輸入。
如需宣告轉換的詳細資訊,請參閱 使用轉換宣告規則的時機。
步驟 3 – 執行結果
宣告規則集執行的最後階段會在指定規則集內執行所有規則之後開始,而最終的宣告集會出現在輸出宣告集中。 此時,宣告引擎會將輸出宣告集的內容當做規則集執行的輸出傳回。 從此時起,由理賠流程接手,並將這個最終輸出移至其流程中的下一個階段。
將執行結果傳送至理賠流程管線
當宣告引擎處理規則集時,該規則集在其輸入和輸出宣告集的記憶體中有自己的專用位置。 這表示一個規則集所使用的輸入和輸出宣告集與另一個規則集中所使用的輸入和輸出宣告集不同。
當整個流程針對指定的規則集執行完畢後(步驟 1、2 和 3),新發出的宣告(即輸出宣告集的內容)將作為宣告管線中下一個規則集的輸入。 這可讓宣告從一個規則集的輸出流向另一個規則集的輸入,如下圖所示。
備註
雖然發行規則集也是管線中的重要階段,但為了簡化說明,上述圖例未顯示該階段。 若要查看顯示發行規則集及其如何融入宣告管線的插圖,請參閱 宣告管線的角色。
在此情況下,管線會使用驗收規則的輸出,將驗收規則所產生的最終宣告集流至管線中的第二個階段,也就是處理授權規則。 此時,整個宣告規則執行程式(上述步驟 1、2 和 3)將會針對授權規則集再次執行。 此週期會持續到發行規則設定集(流程的最後階段)完成為止。
一旦從發行規則集的引擎傳回完成的傳出宣告之後,它們就會封裝成 SAML 令牌,而同盟服務會將令牌傳回用戶端。
處理授權規則
如果在宣告規則執行程序的步驟 2 中執行的宣告規則集包含授權規則(其輸入和輸出宣告集與接受或發行規則不同),則這些授權規則會運行,以根據要求者的宣告來判斷令牌要求者是否有權從同盟服務獲得給定信賴方的安全性令牌。
授權規則的目標是根據使用者是否允許取得信賴方所需的令牌來作出允許或拒絕請求的決定。 如下圖所示,管線會使用授權執行的輸出來判斷是否執行簽發規則集,這根據允許和/或拒絕宣告的存在與否來決定,但授權執行的輸出本身不會作為宣告規則集的輸入。
如需宣告授權的詳細資訊,請參閱 何時使用授權宣告規則。