SAML 宣告政策

查看 Apigee Edge 說明文件。
前往 Apigee X說明文件
資訊

結果

  • 傳入驗證和授權:驗證 SAML 宣告 政策
    透過 SAML 政策類型,API Proxy 可以驗證已附加的 SAML 宣告 傳入的 SOAP 請求中。SAML 政策會驗證傳入郵件, 數位簽署的 SAML 斷言、拒絕無效宣告,並設定 允許額外的政策或後端服務本身,進一步驗證資訊 插入文字。
  • 產生傳出權杖:產生 SAML 宣告政策
    SAML 政策類型可讓 API Proxy 將 SAML 宣告附加至傳出 XML 要求。 這些斷言可供後端服務運用,進一步套用安全性 來處理驗證和授權的程序

範例

產生 SAML 宣告

<GenerateSAMLAssertion name="SAML" ignoreContentType="false">
  <CanonicalizationAlgorithm />
  <Issuer ref="reference">Issuer name</Issuer>
  <KeyStore>
    <Name ref="reference">keystorename</Name>
    <Alias ref="reference">alias</Alias>
  </KeyStore>
  <OutputVariable>
    <FlowVariable>assertion.content</FlowVariable>
    <Message name="request">
      <Namespaces>
        <Namespace prefix="test">http://www.example.com/test</Namespace>
      </Namespaces>
      <XPath>/envelope/header</XPath>
    </Message>
  </OutputVariable>
  <SignatureAlgorithm />
  <Subject ref="reference">Subject name</Subject>
  <Template ignoreUnresolvedVariables="false">
    <!-- A lot of XML goes here, in CDATA, with {} around
         each variable -->
  </Template>
</GenerateSAMLAssertion>

產生 SAML 宣告

驗證 SAML 宣告

<ValidateSAMLAssertion name="SAML" ignoreContentType="false">
  <Source name="request">
    <Namespaces>
      <Namespace prefix='soap'>http://schemas.xmlsoap.org/soap/envelope/</Namespace>
      <Namespace prefix='wsse'>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd</Namespace>
      <Namespace prefix='saml'>urn:oasis:names:tc:SAML:2.0:assertion</Namespace>
    </Namespaces>
    <AssertionXPath>/soap:Envelope/soap:Header/wsse:Security/saml:Assertion</AssertionXPath>
    <SignedElementXPath>/soap:Envelope/soap:Header/wsse:Security/saml:Assertion</SignedElementXPath>
  </Source>
  <TrustStore>TrustStoreName</TrustStore>
  <RemoveAssertion>false</RemoveAssertion>
</ValidateSAMLAssertion>

驗證 SAML 宣告


元素參照

產生 SAML 宣告

欄位名稱 說明
name 項屬性 政策執行個體的名稱。名稱不得重複 並根據貴機構的使命 價值觀和目標進行調整名稱中可使用的字元上限為 A-Z0-9._\-$ %。然而,管理 UI 會強制執行其他限制,例如 自動移除非英數字元。
ignoreContentType 項屬性 布林值,可設為 truefalse。根據預設, 如果訊息的內容類型不是 XML,則系統不會產生斷言 內容類型。如果設為 true,系統會將訊息視為 XML 所有內容類型
Issuer
識別資訊提供者的專屬 ID,如果選用 ref 屬性,則系統會根據 指定的變數。如果沒有選用的 ref 屬性,則 值。
KeyStore
包含私密金鑰的 KeyStore 名稱以及私密金鑰的別名 。
OutputVariable
FlowVariable
Message 政策的目標。有效值為 messagerequest、 和 response。設為 message 時,系統會有條件地政策 根據政策的附件點擷取訊息物件。附加至 要求流程,政策會解析 message 要求,當附加至要求時 回應的流程,政策會解析 message 以回應。
XPath XPath 運算式,會指出傳出 XML 文件中的元素 政策會附加 SAML 宣告。
SignatureAlgorithm SHA1 或 SHA256
Subject
SAML 宣告主體的專屬 ID。如果非必要 如果有 ref 屬性,則主體值會在 產生執行要求如果選用的 ref 屬性為 那麼標題就會使用主旨的值
Template
如果有的話,就會透過執行這個範本產生斷言 包含對應變數的 {} 物件,然後數位 簽署結果。系統會按照 AssignMessage 政策規則處理範本。 請參閱指派 訊息政策:

驗證 SAML 宣告

欄位名稱 說明
name 項屬性
政策執行個體的名稱。機構中的名稱不得重複。 名稱中可使用的字元上限為 A-Z0-9._\-$ %。 不過,管理 UI 會強制執行其他限制,例如 移除非英數字元。
ignoreContentType 項屬性 布林值,可設為 truefalse。根據預設, 如果訊息的內容類型不是 XML,則系統不會產生斷言 內容類型。如果設為 true,系統會將訊息視為 XML 所有內容類型
Source 政策的目標。有效值為 messagerequest、 和 response。設為 message 時,系統會有條件地政策 根據政策的附件點擷取訊息物件。附加至 要求流程,政策會解析 message 要求,當附加至要求時 回應的流程,政策會解析 message 以回應。
XPath
已淘汰。Source 的子項。使用 《AssertionXPath》和《SignedElementXPath》。
AssertionXPath
Source 的子項。XPath 運算式,能指出 允許政策擷取 SAML 宣告的傳入 XML 文件。
SignedElementXPath
Source 的子項。XPath 運算式,能指出 繫結 XML 文件,政策可從中擷取已簽署的元素。這個 可能與 AssertionXPath 的 XPath 不同或相同。
TrustStore
包含用於驗證之受信任 X.509 憑證的 TrustStore 名稱 進行數位簽章簽署。
RemoveAssertion
布林值,可設為 truefalse。時間 true,系統會將 SAML 宣告從要求訊息中移除 便會將訊息轉送至後端服務

使用須知

安全宣告標記語言 (SAML) 規格會定義 可讓應用程式交換 XML 格式資訊,以進行驗證及 或授權。

一項「安全性聲明」是信任的權杖,用於描述應用程式使用者的屬性、應用程式使用者 或交易中的其他參與者。資安斷言是由兩個端點管理及消耗 實體類型:

  • 識別資訊提供者:代表參與者產生安全性斷言
  • 服務供應商:透過與身分的信任關係驗證安全性斷言 提供者

API 平台能夠做為識別資訊提供者和服務供應商。如同 產生斷言並附加至要求訊息,藉此建立斷言 可供後端服務處理的斷言。做為服務供應商 驗證傳入要求訊息的斷言。

SAML 政策類型支援與 SAML Core 2.0 版相符的 SAML 宣告 WS-Security SAML 權杖設定檔規格的規格和 1.0 版。

產生 SAML 宣告

政策處理:

  1. 如果訊息不是 XML,且 IgnoreContentType 未設為 true,則 並傳送錯誤
  2. 如果為「Template」,然後按照 AssignMessage 政策中說明處理範本。 如果缺少任何變數且未設定 IgnoreUnresolvedVariables,請引發錯誤。
  3. 如果為「Template」未設定,然後建構內含 主旨和核發者參數或其參照。
  4. 使用指定金鑰簽署斷言。
  5. 將斷言新增至指定的 XPath 訊息。

驗證 SAML 宣告

政策處理:

  1. 這項政策會檢查傳入訊息,驗證要求的媒體類型是否為 XML。 請檢查內容類型是否符合 text/(.*+)?xmlapplication/(.*+)?xml。如果媒體類型不是 XML, 如果未設定 <IgnoreContentType>,這項政策會引發錯誤。
  2. 這項政策會剖析 XML。如果剖析失敗,就會引發錯誤。
  3. 這項政策會使用各自的 XPath 擷取已簽署元素和斷言 指定 (<SignedElementXPath><AssertionXPath>)。 如果上述任一路徑未傳回元素,政策就會引發錯誤。
  4. 這項政策會驗證斷言與已簽署的元素相同。 是已簽署元素的子項。如果禁止,政策就會引發錯誤。
  5. 如果 <NotBefore><NotOnOrAfter> 其中之一 元素都存在於斷言中,政策就會根據 這些值如 SAML Core 第 2.5.1 節所述。
  6. 這項政策將套用任何其他處理「條件」規則 。
  7. 這項政策會使用 <TrustStore><ValidateSigner> (如上所述)。 如果驗證失敗,這項政策會引發錯誤。

等政策完成後再提出錯誤,但 Proxy 的開發人員 下列項目:

  • 斷言中的數位簽章有效,且由信任的 CA 簽署
  • 斷言在目前時間範圍內有效
  • 系統會擷取斷言的主體和核發者,並在流程變數中設定。是 其他政策也必須負責將這些值用於其他驗證,例如 檢查主體名稱是否有效,或傳遞至目標系統進行驗證。

ExtractVariables 等其他政策可能會用於剖析斷言的原始 XML 來處理更複雜的驗證方式


流程變數

SAML 宣告中可以指定許多資訊。SAML 斷言本身是 XML,可使用 ExtractVariables 政策和其他 機制來處理更複雜的驗證。

變數 說明
saml.id SAML 宣告 ID
saml.issuer 「核發者」的斷言,從其原生 XML 型別轉換為字串
saml.subject 「Subject」的斷言,從其原生 XML 型別轉換為字串
saml.valid 根據有效性檢查結果傳回 true 或 false
saml.issueInstant IssueInstant
saml.subjectFormat 主旨格式
saml.scmethod 主旨確認方式
saml.scdaddress 主體確認資料地址
saml.scdinresponse 回覆中的主旨確認資料
saml.scdrcpt 主旨確認資料收件者
saml.authnSnooa 驗證 SessionNotOnOr 後
saml.authnContextClassRef AuthnStatement AuthnContextClassRef
saml.authnInstant AuthnStatement 驗證即時性
saml.authnSessionIndex 驗證工作階段索引

錯誤參考資料

本節說明系統傳回的錯誤代碼和錯誤訊息 這項政策觸發錯誤時,由 Edge 設定的錯誤變數。 請務必瞭解這份資訊,以便瞭解您是否要擬定錯誤規則, 處理錯誤詳情請參閱這篇文章 瞭解政策錯誤處理方式 發生錯誤

部署錯誤

當您部署含有這項政策的 Proxy 時,可能會發生這些錯誤。

錯誤名稱 原因 修正
SourceNotConfigured 驗證 SAML 宣告的下列一或多個元素 未定義政策或空白:<Source><XPath><Namespaces><Namespace>
TrustStoreNotConfigured 如果 <TrustStore> 元素為空白或未在 AuthSAMLAssertion 政策,API Proxy 的部署作業就會失敗。 必須提供有效的 Trust Store。
NullKeyStoreAlias 如果子元素 <Alias> 為空白或未在 <Keystore> 中指定 產生 SAML 宣告政策的元素,然後是 API 的部署作業 Proxy 故障。必須提供有效的 KeyStore 別名。
NullKeyStore 如果子元素 <Name> 為空白或未在 <Keystore> 中指定 GenerateSAMLAssertion 政策的一部分,接著是 API 的部署作業。 Proxy 故障。必須提供有效的 KeyStore 名稱。
NullIssuer 如果 <Issuer> 元素為空白或未在 Generate SAML 中指定 斷言政策,那麼 API Proxy 的部署作業就會失敗。A 罩杯 必須提供有效的「<Issuer>」值。

錯誤變數

系統會在發生執行階段錯誤時設定這些變數。詳情請參閱重要須知 政策錯誤。

變數 地點 範例
fault.name="fault_name" fault_name 是錯誤的名稱。錯誤名稱是錯誤程式碼的最後部分。 fault.name = "InvalidMediaTpe"
GenerateSAMLAssertion.failed 驗證 SAML 宣告政策設定時,錯誤前置字串會 ValidateSAMLAssertion GenerateSAMLAssertion.failed = true

錯誤回應範例

{
  "fault": {
    "faultstring": "GenerateSAMLAssertion[GenSAMLAssert]: Invalid media type",
    "detail": {
      "errorcode": "steps.saml.generate.InvalidMediaTpe"
    }
  }
}

錯誤規則範例

<FaultRules>
    <FaultRule name="invalid_saml_rule">
        <Step>
            <Name>invalid-saml</Name>
        </Step>
        <Condition>(GenerateSAMLAssertion.failed = "true")</Condition>
    </FaultRule>
</FaultRules>

相關主題

擷取變數:擷取變數 政策