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

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

SourceNotConfigured

הודעת שגיאה

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

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.

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

סיבה

הפריסה של שרת ה-Proxy ל-API נכשלת עם השגיאה הזו אם אחד או יותר מהרכיבים הבאים במדיניות 'אימות טענת נכונות של SAML' לא מוגדרים או ריקים: <Source>, <XPath>, <Namespaces>, <Namespace>.

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

אבחון

  1. מזהים את השם של מדיניות טענת הנכוֹנוּת (assertion) של אימות SAML שנכשל בהודעת השגיאה. לדוגמה, בשגיאה הבאה, שם המדיניות של טענת הנכוֹנוּת (assertion) של SAML הוא 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> מוגדר ואינו ריק.

כדי לתקן את המדיניות לדוגמה של אימות טענת נכונות של SAML שמוצגת למעלה, אפשר להוסיף את הרכיבים של <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

הודעת שגיאה

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

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> ריק או שלא צוין במדיניות אימות SAMLAssertion, אז הפריסה של שרת ה-proxy של ה-API תיכשל. צריך להזין Trust Store תקין.

אבחון

  1. לבדוק את כל כללי המדיניות לאימות טענת נכוֹנוּת (assertion) של SAML בשרת ה-API הספציפי שבו קרתה הכשל. אם יש מדיניות כלשהי לטענת נכוֹנוּת (assertion) של SAML שבה הרכיב <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> תמיד מצוין ושאינו ריק במדיניות Verify 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, יש לעיין ב-Truststores וב-Keystores.

NullKeyStore

הודעת שגיאה

כשפורסים את ה-API של שרת ה-proxy דרך ממשק המשתמש של 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, הפריסה של שרת ה-proxy של ה-API תיכשל. צריך להזין שם תקין ל-Keystore.

אבחון

  1. בודקים את כל כללי המדיניות ליצירת טענת נכוֹנוּת (assertion) של SAML בשרת ה-API הספציפי שבו קרתה הכשל. אם יש מדיניות כלשהי מסוג Generate (טענת נכוֹנוּת) של 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

הודעת שגיאה

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

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 תיכשל. צריך להזין כינוי חוקי ל-Keystore.

אבחון

  1. בודקים את כל כללי המדיניות ליצירת טענת נכוֹנוּת (assertion) של SAML בשרת ה-API הספציפי שבו קרתה הכשל. אם יש מדיניות כלשהי מסוג Generate (טענת נכוֹנוּת) של SAML, שבה אלמנט הצאצא <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

הודעת שגיאה

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

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

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

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

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

סיבה

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

אבחון

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

    במדיניות הבאה ליצירת טענת נכוֹנוּת (assertion) של 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 (יצירת טענת נכונות של SAML).

כדי לתקן את הדוגמה שלמעלה, צריך לציין את הרכיב <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.