當您想要發出包含屬性存放區中實際存在的輕量目錄存取協定 (LDAP) 屬性值的宣告時,可以在 Active Directory 同盟服務 (AD FS) 中使用此規則,然後將每個 LDAP 屬性與宣告類型建立關聯。 如需屬性存放區的詳細資訊,請參閱 屬性存放區的角色。
當您使用此規則時,您會針對您指定的每個 LDAP 屬性發出宣告,且該屬性符合規則邏輯,如下表所述。
規則選項 | 規則邏輯 |
---|---|
將LDAP屬性對應至傳出宣告類型 | 如果屬性存放區等於 指定的屬性存放區和 LDAP屬性等於 指定的值,則將LDAP屬性值對應至 指定的傳出宣告 類型,並發出宣告。 |
下列各節提供索賠規則的基本簡介。 它們也會提供何時使用傳送LDAP屬性作為宣告規則的詳細數據。
關於索賠規則
宣告規則代表一種商業邏輯規則,它將接收傳入的宣告,對其應用條件(如果 x 則為 y),然後根據條件參數生成傳出宣告。 在您進一步閱讀本主題之前,下列清單概述您應該瞭解的宣告規則的重要提示:
在 AD FS 管理控制台中,宣告規則只能使用宣告規則範本來建立。
宣告規則會處理從宣告提供者 (例如 Active Directory 或其他同盟服務) 直接接收的宣告,或者從宣告提供者信任的接受轉換規則輸出接收的宣告。
宣告規則會依照指定規則集內的時間順序,由宣告發行引擎處理。 藉由設定規則的優先順序,您可以進一步精簡或篩選指定規則集內先前規則所產生的宣告。
宣告規則範本一律會要求您指定傳入宣告類型。 不過,您可以使用單一規則來處理具有相同宣告類型的多個宣告值。
如需宣告規則和宣告規則集的詳細資訊,請參閱宣告規則的角色。 如需規則處理方式的詳細資訊,請參閱《宣告引擎的角色》。 如需了解有關處理宣告規則集的更多資訊,請參閱「宣告管線的角色」。
將LDAP屬性對應至傳出宣告類型
當您使用傳送 LDAP 屬性做為宣告規則範本時,您可以從 LDAP 屬性存放區選取屬性,例如 Active Directory 或 Active Directory Domain Services (AD DS),以將其值當做宣告傳送給信賴憑證者。 這基本上會將您定義之屬性存放區的特定 LDAP 屬性對應至一組可用於授權的傳出宣告。
透過使用此範本,您可以從單一規則新增多個屬性,以多個宣告的形式傳送。 例如,您可以使用此規則範本來建立規則,以查閱來自公司和部門的 Active Directory 屬性中已驗證使用者的屬性值,然後將這些值作為兩個不同的傳出宣告發送。
您也可以使用此規則來傳送所有使用者的群組成員資格。 如果您只想傳送個別群組成員資格,請使用「傳送群組成員資格作為宣告」規則範本。 如需詳細資訊,請參閱 何時使用傳送群組成員資格作為宣告規則。
如何建立此規則
您可以使用宣告規則語言,或在 AD FS 管理嵌入式管理單元中使用 [傳送 LDAP 屬性作為宣告] 規則範本來建立此規則。 此規則範本提供下列組態選項:
指定宣告規則名稱
選取要從中擷取 LDAP 屬性的屬性存放區
將LDAP屬性對應至輸出聲明類型
如需如何建立此規則的詳細資訊,請參閱 建立規則以傳送LDAP屬性作為宣告。
使用宣告規則語言
如果對 Active Directory、AD DS 或 Active Directory 輕量型目錄服務 (AD LDS) 的查詢必須與 samAccountname 以外的 LDAP 屬性進行比較,您必須改用自定義規則。 如果輸入集中沒有 Windows 帳戶名稱宣告,您也必須使用自定義規則來指定要用於查詢 AD DS 或 AD LDS 的宣告。
下列範例可協助您瞭解一些使用宣告規則語言來查詢和擷取屬性存放區中數據的各種方式,以建構自定義規則。
範例:如何查詢 AD LDS 屬性存放區並傳回指定的值
參數必須以分號分隔。 第一個參數是LDAP篩選條件。 後續參數是在任何相符物件上返回的屬性。
下列範例示範如何使用使用者的郵件屬性值,透過 sAMAccountName 屬性查閱使用者,併發出電子郵件位址宣告:
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> issue(store = "AD LDS", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"), query = "sAMAccountName={0};mail", param = regexreplace(c.Value, "(?<domain>[^\\]+)\\(?<user>.+)", "${user}"));
下列範例示範如何透過郵件屬性查閱使用者,並且根據用戶的title和displayname屬性值發出頭銜和顯示名稱的宣告:
c:[Type == " http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress ", Issuer == "AD AUTHORITY"]
=> issue(store = "AD LDS ", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/title","http://schemas.xmlsoap.org/ws/2005/05/identity/claims/displayname"), query = "mail={0};title;displayname", param = c.Value);
下列範例顯示如何依電子郵件和職稱查找使用者,然後使用該使用者的 displayname 屬性來發出顯示名稱宣告:
c1:[Type == " http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"] && c2:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/title"]
=> issue(store = "AD LDS ", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/displayname"), query = "(&(mail={0})(title={1}));displayname", param = c1.Value, param = c2.Value);
範例:如何查詢 Active Directory 屬性存放區並傳回指定的值
Active Directory 查詢必須包含使用者的名稱(域名為功能變數名稱),做為最終參數,讓 Active Directory 屬性存放區可以查詢正確的網域。 否則,支援相同的語法。
下列範例示範如何依其網域中的 sAMAccountName 屬性來查閱用戶,然後傳回 mail 屬性:
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"), query = "sAMAccountName={0};mail;{1}", param = regexreplace(c.Value, "(?<domain>[^\\]+)\\(?<user>.+)", "${user}"), param = c.Value);
範例:如何根據傳入宣告的值查詢 Active Directory 屬性存放區
c:[Type == "http://test/name"]
=> issue(store = "Enterprise AD Attribute Store",
types = ("http://test/email"),
query = ";mail;{0}",
param = c.Value)
先前的查詢是由下列三個部分所組成:
LDAP 篩選條件- 您可以指定查詢的部份,以擷取您要查詢屬性的物件。 如需有效LDAP查詢的一般資訊,請參閱 RFC 2254。 當您查詢 Active Directory 屬性存放區且未指定 LDAP 篩選條件時,會假設使用 samAccountName={0} 查詢,並且 Active Directory 屬性存放區會預期一個參數以提供 {0} 的值。 否則,查詢將會產生錯誤。 對於 Active Directory 以外的 LDAP 屬性存放區,您無法省略查詢的 LDAP 篩選部分,否則查詢將會產生錯誤。
屬性規格:在查詢的第二個部分中,您需要指定從篩選後的物件中想要取得的屬性,如果使用多個屬性,請用逗號分隔。 您指定的屬性數目必須符合您在查詢中定義的宣告類型數目。
Active Directory 網域- 只有在屬性存放區是 Active Directory 時,才指定查詢的最後一個部分。 (當您查詢其他屬性存放區時,這不是必須的。)查詢的這個部分是用來在網域\n名稱中指定用戶帳戶。 Active Directory 屬性存放區會使用網域元件來判斷適當的域控制器,以連線並執行查詢並要求屬性。
範例:如何使用兩個自定義規則,從 Active Directory 中的屬性擷取管理員電子郵件
下列兩個自定義規則,在如下所示的順序中使用時,請查詢 Active Directory 以取得使用者帳戶的 管理員 屬性(規則 1),然後使用該屬性來查詢管理員的用戶帳戶以取得 郵件 屬性(規則 2)。 最後,信箱屬性會被發佈為「ManagerEmail」宣告。 總而言之,規則 1 會查詢 Active Directory,並將查詢的結果傳遞至規則 2,然後擷取管理員電子郵件值。
例如,當這些規則完成執行時,會發出宣告,其中包含 corp.fabrikam.com 網域中用戶經理的電子郵件位址。
規則 1
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]
=> add(store = "Active Directory", types = ("http://schemas.xmlsoap.org/claims/ManagerDistinguishedName"), query = "sAMAccountName=
{0};mail,userPrincipalName,extensionAttribute5,manager,department,extensionAttribute2,cn;{1}", param = regexreplace(c.Value, "(?
<domain>[^\\]+)\\(?<user>.+)", "${user}"), param = c.Value);
規則 2
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname"]
&& c1:[Type == "http://schemas.xmlsoap.org/claims/ManagerDistinguishedName"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/claims/ManagerEmail"), query = "distinguishedName={0};mail;{1}", param = c1.Value,
param = regexreplace(c1.Value, ".*DC=(?<domain>.+),DC=corp,DC=fabrikam,DC=com", "${domain}\username"));
備註
只有當使用者的管理員與用戶位於相同的網域時,這些規則才能運作(在此範例中為 corp.fabrikam.com)。