פתרון בעיות של שגיאות פריסה של מדיניות טענת נכוֹנוּת (assertion) ב-SAML

אתם מציגים את מסמכי התיעוד של Apigee Edge.
לעיון במאמרי העזרה של Apigee X.
מידע

SourceNotConfigured

הודעת השגיאה

השגיאה:

Error Deploying Revision revision_number to environment
ValidateSAMLAssertion[policy_name]: Source is not correctly configured.

הודעת שגיאה לדוגמה

Error Deploying Revision 2 to test
ValidateSAMLAssertion[Validate-SAML-Assertion-1]: Source is not correctly configured.

דוגמה לצילום מסך של שגיאה

סיבה

הפריסה של שרת ה-API proxy נכשלת עם השגיאה הזו אם אחד או יותר מהרכיבים הבאים של מדיניות האימות של טענת הנכוֹנוּת (assertion) של SAML לא מוגדרים או ריקים: <Source>, ‏ <XPath>, ‏ <Namespaces>, ‏ <Namespace>.

לדוגמה, אם מפספסים את הרכיב <XPath> או משאירים את הרכיב <Source> או את הישויות שלו ריקים, הפריסה של שרת ה-proxy ל-API תיכשל.

אבחון

  1. מזהים את שם המדיניות 'אימות טענת נכוֹנוּת' של SAML שנכשל מהודעת השגיאה. לדוגמה, בשגיאה הבאה השם של מדיניות Validate SAML Assertion הוא Validate-SAML-Assertion-1.

    ValidateSAMLAssertion[Validate-SAML-Assertion-1]: Source is not correctly configured.
    
  2. בודקים את קובץ ה-XML של מדיניות האימות של טענת הנכוֹנוּת (assertion) של SAML שנכשל. בודקים אם אחד או יותר מהרכיבים הבאים של המדיניות חסרים או ריקים: <Source>, ‏ <XPath>, ‏ <Namespaces>, ‏ <Namespace>. אם כן, יכול להיות שזו הסיבה לשגיאה.

    לדוגמה, במדיניות הבאה יש רכיב <Namespaces> ריק מתחת לרכיב <Source>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ValidateSAMLAssertion name="SAML" ignoreContentType="false">
      <Source name="request">
        <Namespaces></Namespaces>
       </Source>
       <Description/>
     <TrustStore>ref://TrustStoreName</Truststore>
     <RemoveAssertion>false</RemoveAssertion>
    </ValidateSAMLAssertion>
    
  3. בדוגמה שלמעלה, הרכיב <Namespaces> ריק, ולכן מופיעה השגיאה:

    ValidateSAMLAssertion[Validate-SAML-Assertion-1]: Source is not correctly configured.
    

רזולוציה

מוודאים שהערכים של רכיב <Source> מוגדרים בצורה נכונה עם רכיב <Namespaces> ורכיב הצאצא שלו <Namespace>. בנוסף, צריך לוודא שהרכיב <XPath> מוגדר ולא ריק.

כדי לתקן את דוגמת המדיניות Validate SAML Assertion שמוצגת למעלה, אפשר להוסיף את הרכיבים <Namespace> וגם <XPath>:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<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>
    <XPath>/soap:Envelope/soap:Header/wsse:Security/saml:Assertion</XPath>
  </Source>
   <Description/>
<TrustStore>ref://TrustStoreName</Truststore>
<RemoveAssertion>false</RemoveAssertion>
</ValidateSAMLAssertion>

TrustStoreNotConfigured

הודעת השגיאה

השגיאה:

Error Deploying Revision revision_number to environment
ValidateSAMLAssertion[[Ljava.lang.Object;@object]: Trust store is not correctly configured.

הודעת שגיאה לדוגמה

Error Deploying Revision 2 to test
ValidateSAMLAssertion[[Ljava.lang.Object;@39537262]: Trust store is not correctly configured.

דוגמה לצילום מסך של שגיאה

סיבה

אם הרכיב <TrustStore> ריק או לא צוין במדיניות SAMLSAMLAssertion, הפריסה של שרת ה-proxy ל-API תיכשל. חובה להשתמש ב-Trust Store תקין.

אבחון

  1. בודקים את כל כללי המדיניות של Validate SAML Assertion בשרת ה-proxy הספציפי של ה-API שבו אירעה התקלה. אם יש מדיניות של ValidateSAML Assertion שבה הרכיב <TrustStore> ריק או לא צוין, זו הסיבה לשגיאה.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <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>
        <XPath>/soap:Envelope/soap:Header/wsse:Security/saml:Assertion</XPath>
      </Source>
        <Description/>
        <TrustStore/>
      <RemoveAssertion>false</RemoveAssertion>
    </ValidateSAMLAssertion>
    

רזולוציה

חשוב לוודא שהרכיב <TrustStore> תמיד מצוין ולא ריק במדיניות Validate SAML Assertion. השם של <TrustStore> צריך להיות זהה לשם של TrustStore תקין שנמצא בכל הסביבות שבהן מנסים לפרוס שרת proxy.

כדי לתקן את הדוגמה שלמעלה, אפשר לציין את הרכיב <TrustStore> עם ערך חוקי.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<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>
    <XPath>/soap:Envelope/soap:Header/wsse:Security/saml:Assertion</XPath>
  </Source>
  <TrustStore>TrustStoreName</TrustStore>
  <RemoveAssertion>false</RemoveAssertion>
</ValidateSAMLAssertion>

מידע נוסף על השימוש ב-Truststore זמין במאמר מאגרי Truststore ומאגרי Keystore.

NullKeyStore

הודעת השגיאה

הפריסה של שרת ה-API המחובר דרך ממשק המשתמש של Edge או דרך API הניהול של Edge נכשלת עם הודעת השגיאה הבאה:

Error Deploying Revision revision_number to environment
Assertion KeyStore name cannot be null.

הודעת שגיאה לדוגמה

Error Deploying Revision 4 to test
Assertion KeyStore name cannot be null.

דוגמה לצילום מסך של שגיאה

סיבה

אם רכיב הצאצא <Name> ריק או לא צוין ברכיב <Keystore> של מדיניות GenerateSAMLAssertion, הפריסה של שרת ה-API המחובר תיכשל. צריך להזין שם תקין של מאגר המפתחות.

אבחון

  1. בודקים את כל כללי המדיניות של יצירת טענות נכונות (assertions) של SAML בשרת ה-API הספציפי שבו אירעה התקלה. אם יש מדיניות טענת נכוֹנוּת כלשהי של SAML שבה רכיב הצאצא <Name> ריק או לא מוגדר ברכיב <Keystore>, זו הסיבה לשגיאה.

    במדיניות הזו ליצירת טענת נכוֹנוּת (assertion) של SAML יש אלמנט צאצא ריק <Name> באלמנט <Keystore>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <GenerateSAMLAssertion name="SAML" ignoreContentType="false">`
      <CanonicalizationAlgorithm />
      <Issuer ref="reference">Issuer name</Issuer>
      <KeyStore>
        <Name></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>
    

רזולוציה

חשוב לוודא שרכיב הבן <Name> תמיד מצוין ולא ריק בתוך הרכיב <Keystore> של המדיניות Generate SAML Assertion.

כדי לתקן את הדוגמה שלמעלה, אפשר לציין את הרכיב <Name> בצורה נכונה ולוודא שצוין ערך חוקי לרכיב <Alias>.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<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>

כדאי לעיין בדוגמאות מתוך דוגמאות קוד במאמר העזרה של SAMLAssertion.

NullKeyStoreAlias

הודעת השגיאה

השגיאה:

Error Deploying Revision revision_number to environment
Assertion KeyStore alias cannot be null.

הודעת שגיאה לדוגמה

Error Deploying Revision 4 to test
Assertion KeyStore alias cannot be null.

דוגמה לצילום מסך של שגיאה

סיבה

אם רכיב הצאצא <Alias> ריק או לא צוין ברכיב <Keystore> של המדיניות Generate SAML Assertion, הפריסה של שרת ה-proxy ל-API תיכשל. צריך להזין כינוי תקין של מאגר המפתחות.

אבחון

  1. לבדוק את כל כללי המדיניות של Generate SAML Assertion בשרת ה-proxy ל-API הספציפי שבו התרחשה הכשל. אם יש מדיניות GenerateSAML Assertion שבה אלמנט הצאצא <Alias> ריק או לא צוין באלמנט <Keystore>, זו הסיבה לשגיאה.

    במדיניות הזו ליצירת טענת נכוֹנוּת (assertion) של SAML יש אלמנט צאצא ריק <Alias> באלמנט <Keystore>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <GenerateSAMLAssertion name="SAML" ignoreContentType="false">`
      <CanonicalizationAlgorithm />
      <Issuer ref="reference">Issuer name</Issuer>
      <KeyStore>
        <Name ref="reference">keystorename</Name>
        <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>
    

רזולוציה

חשוב לוודא שרכיב הצאצא <Name> מצוין תמיד ולא ריק ברכיב <Keystore> של המדיניות Generate SAML Assertion.

כדי לתקן את הדוגמה שלמעלה, אפשר לציין את הרכיב <Alias> בצורה נכונה ולוודא שצוין ערך חוקי לרכיב <Name>.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<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>

אפשר לעיין בדוגמאות במאמר דוגמאות קוד במאמר העזרה בנושא מדיניות SAMLAssertion.

NullIssuer

הודעת השגיאה

השגיאה:

Error Deploying Revision revision_number to environment
Assertion Issuer cannot be null.

הודעת שגיאה לדוגמה

Error Deploying Revision 4 to test
Assertion Issuer cannot be null.

דוגמה לצילום מסך של שגיאה

סיבה

אם האלמנט <Issuer> ריק או לא צוין במדיניות יצירת טענת הנכוֹנוּת של SAML, הפריסה של שרת ה-API המחובר תיכשל. נדרש ערך <Issuer> תקין.

אבחון

  1. בודקים את כל כללי המדיניות של יצירת טענות נכונות (assertions) של SAML בשרת ה-API הספציפי שבאמצעותו התרחשה התקלה. אם יש מדיניות Generate SAML Assertion שבה האלמנט <Issuer> ריק או לא צוין, זו הסיבה לשגיאה.

    במדיניות הזו ליצירת טענות נכונות (assertions) של SAML יש רכיב <Issuer> ריק:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <GenerateSAMLAssertion name="SAML" ignoreContentType="false">`
      <CanonicalizationAlgorithm />
      <Issuer></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>
    

רזולוציה

חשוב לוודא שהרכיב <Issuer> תמיד מצוין ולא ריק במדיניות Generate SAML Assertion.

כדי לתקן את הדוגמה שלמעלה, צריך לציין את הרכיב <Issuer> בצורה נכונה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<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>

אפשר לעיין בדוגמאות במאמר דוגמאות קוד במאמר העזרה בנושא מדיניות SAMLAssertion.