規則群組和規則
更新日期:2015 年 6 月 19 日
適用對象:Azure
在Microsoft Azure Active Directory 存取控制 (也稱為存取控制服務或 ACS) 中,規則群組是一組具名的宣告規則,可定義哪些身分識別宣告會從識別提供者傳遞至信賴憑證者應用程式。 在 ACS 中,規則群組會與信賴憑證者應用程式相關聯。 一個規則群組可用於多個信賴憑證者應用程式,而一個信賴憑證者應用程式可以參照多個規則群組。
當 ACS 收到權杖要求或來自識別提供者的權杖時,它會透過與信賴憑證者應用程式相關聯的所有規則群組來執行,以處理權杖中的宣告。 所有的規則群組以及每個規則群組中的所有規則會同時執行 (順序並不重要)。 如果規則導致此執行完成之後發出任何新的宣告,則與信賴憑證者應用程式相關聯的規則群組便會重新執行。 當執行程式完成或 ACS 完成十次執行之後,或 ACS 完成十次執行之後, (第) 一次執行時,規則和規則群組執行進程就會停止。
您可以使用 ACS 管理入口網站或以程式設計方式使用 ACS 管理服務,手動建立和編輯規則群組和規則。
使用 ACS 管理入口網站設定規則
建立規則群組
當您在 ACS 管理入口網站中新增和設定新信賴憑證者應用程式的屬性時,您也可以建立與此信賴憑證者應用程式相關聯的規則群組,因為根據預設,ACS 管理入口網站的 [新增信賴憑證者應用程式] 頁面中會核取 [建立新的規則群組] 選項。 我們強烈建議您保留選取此選項,進而建立新信賴憑證者應用程式的預設規則群組。 (如需詳細資訊,請參閱 信賴憑證者應用程式中的。) 您也可以使用 ACS 管理入口網站的 [ 規則群組 ] 區段來新增規則群組。 然後,當您使用 [新增信賴憑證者應用程式] 頁面新增信賴憑證者應用程式時,您可以將它們與一或多個現有規則群組建立關聯。
產生規則
建立規則群組之後,您可以使用 ACS 管理入口網站的 [ 編輯規則群組 ] 頁面來自動產生規則。 如果您決定自動產生規則,系統會提示您選取要為其產生規則的身分識別提供者。 當規則群組連結至一或多個信賴憑證者應用程式時,依預設會選取這些信賴憑證者應用程式所使用的身分識別提供者。
注意
若是 WS-同盟身分識別提供者,系統會為該身分識別提供者的 WS-同盟中繼資料所提供的每個宣告類型建立一個規則,此規則便會傳遞宣告類型和值。 若是其他身分識別提供者,系統會根據預先決定的宣告類型清單來產生傳遞規則。
檢視、新增和編輯規則
ACS 管理入口網站的 [編輯規則群組 ] 頁面會顯示資料表中的所有規則,其中資料行包含規則的 [輸出宣告 ]、 [宣告簽發者 ] (可以是識別提供者或 ACS) ,以及 [描述]。
如果您按一下資料表中的指定規則,您會被重新導向至 [編輯宣告規則] 頁面,您可以在此編輯規則。 若要手動新增規則,您可以按一下 [新增]。
宣告規則
宣告規則描述 ACS 如何將輸入宣告轉換成輸出宣告的邏輯。 規則包含在與信賴憑證者應用程式相關聯的規則群組內,而且每當 ACS 為應用程式發行權杖時,就會執行。 如果規則群組不包含任何規則,則系統不會簽發權杖給信賴憑證者應用程式。 一般來說,您要簽發給信賴憑證者應用程式的每個宣告類型都必須要有一個規則。 您可以只建立並使用一個規則來傳遞所有宣告類型和值。 不過,每個宣告類型會使用一個規則可以提高安全性,並可以讓您更容易掌控傳遞至應用程式的資料。
在 ACS 中,您可以設定規則,將接收自識別提供者或用戶端的宣告傳遞至信賴憑證者應用程式,而不需要變更宣告的類型、簽發者或值。 這些規則的名稱是 [傳遞] 規則。 例如,Windows Live ID 所發行的權杖 (Microsoft 帳戶) 包含nameidentifier宣告類型。 若要將此宣告未變更傳遞至信賴憑證者應用程式,您必須設定傳遞規則,以處理來自宣告簽發者的輸入nameidentifier宣告類型,Windows Live ID,並建立相同的輸出宣告。
下表說明宣告如何從名為 Contoso.com 的虛構 AD FS 2.0 身分識別提供者傳遞出去。
輸入宣告 | 輸出宣告 | ||||
---|---|---|---|---|---|
Issuer |
型別 |
ReplTest1 |
Issuer |
型別 |
ReplTest1 |
Contoso.com |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier |
123456789 |
存取控制服務 |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier |
123456789 |
Contoso.com |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress |
john@contoso.com |
存取控制服務 |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress |
john@contoso.com |
Contoso.com |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name |
John Doe |
存取控制服務 |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/name |
John Doe |
ACS 規則引擎也可讓您根據宣告簽發者、輸入宣告類型和值,將輸入宣告轉換成完全不同的輸出宣告。 換句話說,ACS 規則引擎可讓您藉由新增、移除或變更權杖所包含的宣告,將輸入權杖轉換成不同的輸出權杖。 這種形式的宣告轉換讓 ACS 能夠根據宣告輸入值實作基本授權。 下列範例說明如果 “nameidentifier” 輸入宣告符合特定值,則系統便會輸出值為「系統管理員」的「角色」宣告類型。
輸入宣告 | 輸出宣告 | ||||
---|---|---|---|---|---|
Issuer |
型別 |
ReplTest1 |
Issuer |
型別 |
ReplTest1 |
Contoso.com |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier |
123456789 |
存取控制服務 |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier |
administrator |
ACS 規則引擎也可讓您根據兩個輸入宣告的結合來建立輸出宣告。 在下列範例中,如果來自 Contoso.com 的 “nameidentifier” 和 “role” 輸入宣告符合特定值,則輸出宣告的類型會是「動作」且值是「寫入」。 當在規則中指定兩個輸入宣告時,這兩個值都必須符合才能產生輸出宣告。
輸入宣告 | 輸出宣告 | ||||
---|---|---|---|---|---|
Issuer |
型別 |
ReplTest1 |
Issuer |
型別 |
ReplTest1 |
Contoso.com |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier |
123456789 |
存取控制服務
|
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/action
|
寫入
|
Contoso.com |
https://schemas.xmlsoap.org/ws/2005/05/identity/claims/role |
administrator |
如需如何使用規則實作權杖轉換的詳細資訊和步驟,請參閱 如何:使用規則實作權杖轉換邏輯。
當您使用 ACS 管理入口網站新增或編輯現有的宣告規則時,您必須設定下列設定:
規則條件 (if) – 新增輸入宣告
本節包含必須為 True 的條件,規則才能簽發輸出宣告。 這些條件包括下列選項:
宣告簽發者 - 是指簽發輸入宣告的實體。 這可以是 (設定的識別提供者,例如) 或 ACS。 如果輸入宣告來自服務身分識別,或輸入宣告來自另一個宣告規則,則 ACS 是簽發者。 如需詳細資訊,請參閱 服務識別。
輸入宣告類型 - 是指從宣告簽發者收到的輸入宣告類型。 例如,「nameidentifier」 的完整宣告類型為 https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier 。 此欄位的選項包括:
任何 - 如果收到來自簽發者的任何宣告類型,則傳回 True。
選取類型 - 如果輸入宣告類型符合下拉式功能表中所選取的類型,則傳回 True。 這個功能表會在選取的宣告簽發者中,填入可用的宣告類型。
輸入類型 - 如果輸入宣告類型符合欄位中所輸入的確切值,則傳回 True。
重要
此欄位會區分大小寫。
輸入宣告值 - 是指所收到的輸入宣告值。 例如,"nameidentifier" 宣告類型會使用電子郵件地址作為它的值,而此欄位可用來檢查特定的電子郵件地址。 此欄位的選項包括:
任何 - 如果收到來自簽發者的任何宣告值,則傳回 True。
輸入值 - 如果輸入宣告類型符合欄位中所輸入的確切值,則傳回 True。 此選項需要您在 [輸入宣告類型] 欄位中選取或輸入特定的輸入宣告類型。
重要
此欄位會區分大小寫。
規則條件 (if) – 新增第二個輸入宣告
若要在規則中新增第二個宣告,請按一下 [新增第二個輸入宣告]。 這可讓您指定額外的條件,如下所示。 請注意,在具有兩個輸入宣告的規則中,所有條件都必須為 True,才能產生輸出宣告。
宣告簽發者 - 是指簽發第二個輸入宣告的實體。 這可以是針對第一個宣告選取的相同識別提供者,也可以是 ACS。 選取 ACS 以指定在規則處理期間從其他宣告規則產生的宣告。
重要
在第一個和第二個宣告中,您無法選取兩個不同的身分識別提供者,因為系統一次只會為從一個身分識別提供者簽發的一個權杖執行規則處理。
輸入宣告類型 - 是指從宣告簽發者收到的輸入宣告類型。 例如,「nameidentifier」 的完整宣告類型為 https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier 。 此欄位的選項包括:
選取類型 - 如果輸入宣告類型符合下拉式功能表中所選取的類型,則傳回 True。 這個功能表會在選取的宣告簽發者中,填入可用的宣告類型。
輸入類型 - 如果輸入宣告類型符合欄位中所輸入的確切值,則傳回 True。
重要
此欄位會區分大小寫。
輸入宣告值 - 是指所收到的輸入宣告值。 例如,"nameidentifier" 宣告類型會使用電子郵件地址作為它的值,而此欄位可用來檢查特定的電子郵件地址。 如果輸入宣告類型符合欄位中所輸入的精確值,則它會傳回 True。
重要
此欄位會區分大小寫。
規則動作 (then)
如果規則的 If 區段中的條件 為 true,則此區段會指定 ACS 所發出的輸出宣告。 輸出宣告包括下列選項:
輸出宣告類型— ACS 所發出的宣告類型。 此欄位包括下列選項:
傳遞輸入宣告類型 - 簽發與輸入宣告相同類型的輸出宣告。
選取類型 - 簽發指定類型的輸出宣告。 下拉式功能表包含常見的宣告類型清單。
輸入類型 - 簽發輸入類型的宣告。 如果輸出宣告出現在 SAML 權杖中,則此值必須是 URI (例如, https://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier) 。
重要
此欄位會區分大小寫。
輸出宣告值- 是指 ACS 所發出的輸出宣告值。 此欄位包括下列選項:
傳遞輸入宣告值 - 簽發其值與輸入宣告值完全相同的輸出宣告。
輸入值 - 簽發在此欄位中輸入值的宣告。 此選項需要您在 [輸出宣告類型] 欄位中選取或輸入特定的輸入宣告類型。
重要
此欄位會區分大小寫。
規則資訊
您可以使用本區段來建立規則的描述。
注意
在 ACS 中,不會針對產生的規則自動建立規則描述。
使用 ACS 管理服務設定規則
您可以使用ACS 管理服務,以程式設計方式設定存取控制命名空間中的規則。 如需如何使用 ASP.NET 設定規則的範例,請參閱程式碼範例:管理服務。 以下是使用 ACS 管理服務來設定規則時要考慮的重要專案:
在規則群組中編輯和刪除規則時,建議您先針對該規則群組內的所有規則查詢 ACS,並使用查詢傳回的規則識別碼來執行編輯或刪除作業。 不建議您儲存管理服務所所傳回的識別碼以供日後作業使用,因為這些識別碼不保證會永久保存。
如果您正在撰寫建立規則的自動重試邏輯 (例如逾時事件),建議您首先查詢目前規則群組中是否有相同規則存在,然後再次嘗試將其新增。