您可以使用宣告規則語言在 Active Directory 同盟服務 (AD FS) 中撰寫自定義宣告規則,這是宣告發行引擎用來以程式設計方式產生、轉換、傳遞和篩選宣告的架構。 藉由使用自定義規則,您可以使用比標準規則範本更複雜的邏輯來建立規則。 當您想要使用自訂規則時,請考慮以下情況:
根據從結構化查詢語言 (SQL) 屬性存放區擷取的值傳送宣告。
根據使用自定義 LDAP 篩選器從輕量型目錄存取通訊協定 (LDAP) 屬性存放區擷取的值傳送宣告。
根據從自定義屬性存放區擷取的值傳送宣告。
只有在有兩個或多個傳入宣告時,才會傳送宣告。
只有在傳入宣告值符合複雜模式時,才會傳送宣告。
將具有複雜變更的宣告傳送至傳入宣告值。
建立宣告,以便只在稍後的規則中使用,而不需要實際傳送宣告。
從多個傳入宣告的內容建構傳出宣告。
當傳出宣告的宣告值必須以傳入宣告的值為基礎,但也必須包含其他內容時,您也可以使用自定義規則。
宣告規則語言是以規則為基礎。 它有條件部分和執行部分。 您可以使用宣告規則語言語法來列舉、新增、刪除或修改宣告,以符合組織的需求。 如需這些元件運作方式的詳細資訊,請參閱 宣告規則語言的角色。
下列各節提供索賠規則的基本簡介。 它們也會提供何時使用自定義宣告規則的詳細數據。
關於索賠規則
宣告規則代表採用傳入宣告的商業規則實例、將條件套用至它(如果 x,則為 y),並根據條件參數產生傳出宣告。
Important
- 在AD FS管理嵌入式管理單元中,只能使用宣告規則範本來建立宣告規則
- 宣告規則會處理從宣告提供者 (例如 Active Directory 或其他同盟服務) 直接接收的宣告,或者從宣告提供者信任的接受轉換規則輸出接收的宣告。
- 宣告規則會依照指定規則集內的時間順序,由宣告發行引擎處理。 藉由設定規則的優先順序,您可以進一步精簡或篩選指定規則集內先前規則所產生的宣告。
- 宣告規則範本一律要求您指定傳入宣告類型。 不過,您可以使用單一規則來處理具有相同宣告類型的多個宣告值。
如需宣告規則和宣告規則集的詳細資訊,請參閱宣告規則的角色。 如需規則處理方式的詳細資訊,請參閱《宣告引擎的角色》。 如需了解有關處理宣告規則集的更多資訊,請參閱「宣告管線的角色」。
如何建立此規則
您可以先使用宣告規則語言撰寫作業所需的語法,然後將結果貼到 [使用自定義規則傳送宣告] 範本中提供的文字框中,這樣您就可以在 AD FS 管理嵌入式管理單元中,針對宣告提供者信任或信賴憑證者信任的屬性建立此規則。
此規則範本提供下列選項:
指定宣告規則名稱
使用 Active Directory Federation Services 宣告規則語言輸入一或多個選擇性條件和發佈聲明
如需使用此範本建立自定義規則的詳細資訊,請參閱 AD FS 部署指南中的 建立規則以使用自定義規則傳送宣告 。
若要進一步瞭解宣告規則語言的運作方式,請按下該規則屬性中的 [ 檢視規則語言 ] 索引標籤,檢視嵌入式管理單元中已存在之其他規則的宣告規則語言語法。 利用本節中的資訊以及此標籤的語法資訊,可以深入了解如何建構您自己的自定義規則。
如何使用宣告規則語言的詳細資訊,請參閱 宣告規則語言的角色。
使用宣稱規則語言
範例:如何根據使用者的名稱屬性值來結合名字和姓氏
以下規則語法會將指定屬性存放區中屬性值的名字和姓氏結合起來。 政策引擎會形成每個條件的符合項目的笛卡兒乘積。 例如,名字 {“Frank”、“Alan”} 和姓氏 {“Miller”、“Shen”} 的輸出是 {“Frank Miller”、“Frank Shen”、“Alan Miller”、“Alan Shen”}:
c1:[type == "http://exampleschema/firstname" ]
&& c2:[type == "http://exampleschema/lastname",]
=> issue(type = "http://exampleschema/name", value = c1.value + " " + c2.value);
範例:如何根據使用者是否有直屬部屬發出管理者的聲明
只有在使用者有下屬人員時,下列規則才會發出管理員聲明:
c:[type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"] => add(store = "SQL Store", types = ("http://schemas.xmlsoap.org/claims/Reports"), query = "SELECT Reports FROM dbo.DirectReports WHERE UserName = {0}", param = c.value );
count([type == "http://schemas.xmlsoap.org/claims/Reports"] ) > 0 => issue(= "http://schemas.xmlsoap.org/claims/ismanager", value = "true");
範例:如何根據LDAP屬性發出PPID聲明
下列規則會根據 LDAP 屬性存放區中使用者的 windowsaccountname 和 originalissuer 屬性發出私人個人識別碼 (PPID) 宣告:
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]
=> issue(store = "_OpaqueIdStore", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/privatepersonalidentifier"), query = "{0};{1};{2}", param = "ppid", param = c.Value, param = c.OriginalIssuer);
可用來唯一識別此查詢使用者的常見屬性包括下列各項:
使用者 SID
windowsaccountname
samaccountname