當您需要採用傳入宣告類型,然後套用動作,以根據您在規則中指定的值來決定是否允許或拒絕存取時,您可以在 Active Directory 同盟服務 (AD FS) 中使用此規則。 當您使用此規則時,會根據您在規則中設定的選項之一,傳遞或轉換符合下列規則邏輯的宣告:
規則選項 | 規則邏輯 |
---|---|
允許所有使用者 | 如果傳入的宣告類型等於 或任何宣告類型,且值等於 或任何值,則發出值等於 的宣告,並允許 |
允許具有此傳入宣告的使用者存取 | 如果傳入的宣告類型等於 指定的宣告類型,且值等於 指定的宣告值,則發出一個值為 許可 的宣告。 |
拒絕存取具有此傳入要求權的使用者 | 如果傳入的宣告類型等於 且指定的宣告類型 且值等於 和指定的宣告值,則發出一個宣告,其值為「拒絕」 |
下列各節提供宣告規則的基本簡介,並提供關於何時使用此規則的進一步詳細數據。
關於索賠規則
宣告規則代表一種商業邏輯規則,它將接收傳入的宣告,對其應用條件(如果 x 則為 y),然後根據條件參數生成傳出宣告。 在您進一步閱讀本主題之前,下列清單概述您應該瞭解的宣告規則的重要提示:
在 AD FS 管理控制台中,宣告規則只能使用宣告規則範本來建立。
宣告規則會處理從宣告提供者 (例如 Active Directory 或其他同盟服務) 直接接收的宣告,或者從宣告提供者信任的接受轉換規則輸出接收的宣告。
宣告規則會依照指定規則集內的時間順序,由宣告發行引擎處理。 藉由設定規則的優先順序,您可以進一步精簡或篩選指定規則集內先前規則所產生的宣告。
宣告規則範本一律會要求您指定傳入宣告類型。 不過,您可以使用單一規則來處理具有相同宣告類型的多個宣告值。
如需宣告規則和宣告規則集的詳細資訊,請參閱宣告規則的角色。 如需規則處理方式的詳細資訊,請參閱《宣告引擎的角色》。 如需了解有關處理宣告規則集的更多資訊,請參閱「宣告管線的角色」。
允許所有使用者
當您使用 [允許所有使用者] 規則模板時,所有使用者都可以存取信賴方。 不過,您可以使用其他授權規則進一步限制存取。 如果一個規則允許使用者存取信賴憑證者,而另一個規則會拒絕使用者對信賴憑證者的存取,拒絕結果會覆寫允許結果,而且使用者遭到拒絕存取。
從同盟服務提供者獲准存取信賴方的使用者,仍可能會被信賴方拒絕提供服務。
允許具有此傳入宣告的使用者存取
當您使用 [允許或拒絕使用者基於傳入宣告] 規則範本來建立規則,並將條件設定為允許時,您可以根據傳入宣告的類型和值,允許特定使用者存取信賴方。 例如,您可以使用此規則範本來建立規則,只允許具有網域系統管理員值之群組宣告的使用者。 如果一個規則允許使用者存取信賴憑證者,而另一個規則會拒絕使用者對信賴憑證者的存取,拒絕結果會覆寫允許結果,而且使用者遭到拒絕存取。
允許從同盟服務存取依賴方的使用者仍可能會遭到依賴方拒絕服務。 如果您想要允許所有使用者存取信賴憑證者,請使用 [允許所有使用者] 規則範本。
拒絕存取具有此傳入要求權的使用者
當您使用「根據傳入宣告允許或拒絕使用者」規則範本建立規則,並將條件設定為拒絕時,您可以根據傳入宣告的類型和值拒絕使用者存取信賴方。 例如,您可以使用此規則範本來建立規則,以拒絕具有網域使用者值之群組宣告的所有使用者。
如果您想要使用拒絕條件,同時啟用特定使用者信賴憑證者的存取權,您稍後必須明確新增具有允許條件的授權規則,讓這些用戶能夠存取信賴憑證者。
如果使用者在宣告發行引擎處理規則集時被拒絕存取,則後續的規則處理會中止,並且 AD FS 會將「拒絕存取」錯誤訊息返回給使用者的要求。
授予使用者許可權
在AD FS中,授權規則可用來發出允許或拒絕宣告,以判斷使用者或使用者群組(根據所使用的宣告類型而定),是否允許存取指定信賴憑證者中的 Web 型資源。 授權規則只能設定在信賴方信任中。
授權規則集
根據您需要設定的允許或拒絕作業類型,存在不同的授權規則集。 這些規則集包括:
發行授權規則:這些規則會決定使用者是否可以接收信賴憑證者的宣告,因此,存取信賴憑證者。
委派授權規則:這些規則決定使用者是否可以作為依賴方的另一個使用者行事。 當使用者以其他使用者身份行動時,關於要求使用者的宣稱仍會放在令牌中。
冒充授權規則:這些規則決定使用者是否可以完全假扮另一位使用者給信賴方。 假冒其他使用者是一項非常強大的功能,因為信賴方不會知道使用者正在被假冒。
如需了解授權規則過程如何適用於宣告發行流程的詳細資訊,請參閱宣告發行引擎的角色。
支援的宣告類型
AD FS 定義兩種宣告類型,用來判斷使用者是否允許或拒絕。 這些宣告類型統一資源識別碼 (URI) 如下所示:
允許: http://schemas.microsoft.com/authorization/claims/permit
拒絕: http://schemas.microsoft.com/authorization/claims/deny
如何建立此規則
您可以使用宣告規則語言,或在 AD FS 管理嵌入式管理單元中,使用 允許所有使用者 規則範本或 根據傳入宣告允許或拒絕使用者 規則範本來建立這兩個授權規則。 [允許所有使用者] 規則範本不提供任何組態選項。 不過,允許或拒絕使用者的傳入宣告規則範本提供以下組態選項:
指定宣告規則名稱
指定傳入宣告類型
輸入新索賠值
允許具有此傳入宣告的使用者存取
拒絕存取具有此傳入要求權的使用者
如需有關如何建立此範本的詳細資訊,請參閱 AD FS 部署指南中的 建立允許所有使用者的規則 或 依據傳入宣告建立允許或拒絕使用者的規則。
使用宣稱規則語言
如果只有在宣告值符合自定義模式時才應該傳送宣告,您必須使用自定義規則。 如需詳細資訊,請參閱 使用自訂宣告規則的時機。
如何根據多個宣告建立授權規則的範例
使用宣告規則語言語法來授權宣告時,也可以根據使用者原始宣告中存在多個宣告來發出宣告。 只有當使用者是群組編輯器的成員,且已使用 Windows 驗證進行驗證時,下列規則才會發出授權宣告:
[type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod",
value == "urn:federation:authentication:windows" ]
&& [type == "http://schemas.xmlsoap.org/claims/Group ", value == "editors"]
=> issue(type = "http://schemas.xmlsoap.org/claims/authZ", value = "Granted");
如何建立授權規則以委派誰可以建立或移除同盟伺服器 Proxy 信任的範例
在同盟服務可以使用同盟伺服器 Proxy 重新導向用戶端要求之前,必須先在同盟服務與同盟伺服器 Proxy 計算機之間建立信任。 根據預設,在 AD FS 同盟伺服器 Proxy 設定精靈中成功提供下列任一認證時,就會建立 Proxy 信任:
由聯邦服務使用的服務帳戶,將由proxy保護。
具備 Active Directory 網域帳戶、且是所有聯盟伺服器陣列中聯盟伺服器的本機 Administrators 群組成員
當您想要指定哪些使用者或使用者可以為指定的同盟服務建立 Proxy 信任時,您可以使用下列任一委派方法。 根據AD FS產品小組針對委派最安全且最不有問題的方法的建議,這個方法清單會依優先順序排列。 視組織的需求而定,您只需要使用下列其中一種方法:
在 Active Directory 中建立網域安全組(例如 FSProxyTrustCreators),將此群組新增至伺服器數位中每個同盟伺服器上的本機 Administrators 群組,然後只新增您想要將此許可權委派給新群組的用戶帳戶。 這是慣用的方法。
將使用者的網域帳戶新增至伺服器數位中每個同盟伺服器上的系統管理員群組。
如果基於某些原因,您無法使用這些方法之一,您也可以為此目的建立授權規則。 雖然不建議這麼做,因為此規則未正確寫入時可能發生的可能複雜問題,但您可以使用自定義授權規則來委派哪些 Active Directory 網域用戶帳戶也可以建立或甚至移除與指定同盟服務相關聯的所有同盟伺服器 Proxy 之間的信任。
如果您選擇方法 3,您可以使用下列規則語法發出授權宣告,以允許指定使用者 (在此案例中為 contoso\frankm) 建立一或多個同盟伺服器 Proxy 的信任。 您必須使用 Windows PowerShell 命令 Set-ADFSProperties AddProxyAuthorizationRules 來套用此規則。
c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", issuer=~"^AD AUTHORITY$" value == "contoso\frankm" ] => issue(Type = "https://schemas.microsoft.com/authorization/claims/permit", Value = "true") exists([Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value == "S-1-5-32-544", Issuer =~ "^AD AUTHORITY$"]) => issue(Type = "https://schemas.microsoft.com/authorization/claims/permit", Value = "true"); c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid", Issuer =~ "^AD AUTHORITY$" ] => issue(store="_ProxyCredentialStore",types=("https://schemas.microsoft.com/authorization/claims/permit"),query="isProxyTrustManagerSid({0})", param= c.Value ); c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/proxytrustid", Issuer =~ "^SELF AUTHORITY$" ] => issue(store="_ProxyCredentialStore",types=("https://schemas.microsoft.com/authorization/claims/permit"),query="isProxyTrustProvisioned({0})", param=c.Value );
稍後,如果您想要移除使用者,讓用戶無法再建立 Proxy 信任,您可以還原為預設 Proxy 信任授權規則,以移除使用者建立同盟服務的 Proxy 信任許可權。 您也必須使用 Windows PowerShell 命令 Set-ADFSProperties AddProxyAuthorizationRules 來套用此規則。
exists([Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value == "S-1-5-32-544", Issuer =~ "^AD AUTHORITY$"]) => issue(Type = "https://schemas.microsoft.com/authorization/claims/permit", Value = "true"); c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid", Issuer =~ "^AD AUTHORITY$" ] => issue(store="_ProxyCredentialStore",types=("https://schemas.microsoft.com/authorization/claims/permit"),query="isProxyTrustManagerSid({0})", param= c.Value ); c:[Type == "https://schemas.microsoft.com/ws/2008/06/identity/claims/proxytrustid", Issuer =~ "^SELF AUTHORITY$" ] => issue(store="_ProxyCredentialStore",types=("https://schemas.microsoft.com/authorization/claims/permit"),query="isProxyTrustProvisioned({0})", param=c.Value );
如需有關如何使用宣稱規則語言的詳細資訊,請參閱 宣稱規則語言角色。