מדיניות SAMLAssertion

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

מה

  • אימות והרשאה של בקשות נכנסות: אימות טענת SAML מדיניות
    סוג המדיניות SAML מאפשר לשרתי proxy של API לאמת טענות SAML שמצורפות ל בקשות SOAP נכנסות. מדיניות SAML מאמתת הודעות נכנסות שמכילות הצהרת SAML חתומה דיגיטלית, דוחה אותן אם הן לא תקינות ומגדירה משתנים שמאפשרים למדיניות נוספת או לשירותי הקצה העורפי עצמם לאמת עוד את המידע בהצהרה.
  • יצירת אסימונים יוצאים: יצירת מדיניות של טענות נכוֹנוּת ב-SAML
    סוג המדיניות SAML מאפשר ל-API proxies לצרף טענות נכוֹנוּת ב-SAML לבקשות XML יוצאות. הטענות האלה זמינות כדי לאפשר לשירותים לקצה העורפי להחיל עיבוד אבטחה נוסף לאימות ולהרשאה.

דוגמאות

יצירת טענת נכוֹנוּת (assertion) של 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>

יצירת טענת נכוֹנוּת (assertion) של SAML

אימות טענת נכוֹנוּת (assertion) של 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>

אימות טענת נכוֹנוּת (assertion) של SAML


הפניה לרכיב

יצירת טענת נכוֹנוּת של SAML

שם השדה תיאור
מאפיין אחד (name) השם של מופע המדיניות. השם חייב להיות ייחודי בארגון. התווים שאפשר להשתמש בהם בשם מוגבלים ל: A-Z0-9._\-$ %. עם זאת, בממשק המשתמש לניהול יש הגבלות נוספות, כמו הסרה אוטומטית של תווים שהם לא אלפאנומריים.
מאפיין אחד (ignoreContentType) ערך בוליאני שאפשר להגדיר כ-true או כ-false. כברירת מחדל, הטענה לא תיווצר אם סוג התוכן של ההודעה הוא לא סוג תוכן XML. אם ההגדרה היא true, ההודעה תטופל כ-XML ללא קשר לסוג התוכן.
Issuer
המזהה הייחודי של ספק הזהויות. אם המאפיין האופציונלי ref קיים, הערך של Issuer יוקצה בזמן הריצה על סמך המשתנה שצוין. אם מאפיין ref האופציונלי לא קיים, המערכת תשתמש בערך של מאפיין המנפיק.
KeyStore
השם של מאגר המפתחות שמכיל את המפתח הפרטי והכינוי של המפתח הפרטי שמשמש לחתימה דיגיטלית על טענות הנכונות (assertions) ב-SAML.
OutputVariable
FlowVariable
Message היעד של המדיניות. הערכים התקפים הם message,‏ request ו-response. כשהמדיניות מוגדרת ל-message, היא מאחזרת את אובייקט ההודעה באופן מותנה על סמך נקודת ההצמדה של המדיניות. כשהמדיניות מצורפת לרצף הפעולות של הבקשה, הערך של message הוא request, וכשהיא מצורפת לרצף הפעולות של התגובה, הערך של message הוא response.
XPath ביטוי XPath שמציין את הרכיב במסמך ה-XML היוצא שאליו המדיניות תצרף את הצהרת ה-SAML.
SignatureAlgorithm ‫SHA1 או SHA256
Subject
המזהה הייחודי של הנושא של הצהרת ה-SAML. אם המאפיין האופציונלי ref קיים, הערך של Subject יוקצה בזמן הריצה על סמך המשתנה שצוין. אם מאפיין ref האופציונלי מופיע, המערכת תשתמש בערך של מאפיין הנושא.
Template
אם הוא קיים, הטענה תיווצר על ידי הפעלת התבנית הזו, החלפת כל מה שמסומן ב-{} במשתנה המתאים, ולאחר מכן חתימה דיגיטלית על התוצאה. התבנית מעובדת בהתאם לכללי המדיניות של AssignMessage. איך מקצים מדיניות להודעות

אימות טענת נכוֹנוּת (assertion) של SAML

שם השדה תיאור
מאפיין אחד (name)
השם של מופע המדיניות. השם חייב להיות ייחודי בארגון. התווים שאפשר להשתמש בהם בשם מוגבלים ל: A-Z0-9._\-$ %. עם זאת, בממשק המשתמש לניהול יש הגבלות נוספות, כמו הסרה אוטומטית של תווים שהם לא אלפאנומריים.
מאפיין אחד (ignoreContentType) ערך בוליאני שאפשר להגדיר כ-true או כ-false. כברירת מחדל, הטענה לא תיווצר אם סוג התוכן של ההודעה הוא לא סוג תוכן XML. אם ההגדרה היא true, ההודעה תטופל כ-XML ללא קשר ל-Content-type.
Source היעד של המדיניות. הערכים התקפים הם message,‏ request ו-response. כשהמדיניות מוגדרת ל-message, היא מאחזרת את אובייקט ההודעה באופן מותנה על סמך נקודת ההצמדה של המדיניות. כשהמדיניות מצורפת לרצף הפעולות של הבקשה, הערך של message הוא request, וכשהיא מצורפת לרצף הפעולות של התגובה, הערך של message הוא response.
XPath
הוצא משימוש. הילד או הילדה של Source. אפשר להשתמש ב-AssertionXPath וב-SignedElementXPath.
AssertionXPath
הילד או הילדה של Source. ביטוי XPath שמציין את הרכיב במסמך ה-XML הנכנס שממנו המדיניות יכולה לחלץ את טענת ה-SAML.
SignedElementXPath
הילד או הילדה של Source. ביטוי XPath שמציין את הרכיב במסמך ה-XML הנכנס שממנו המדיניות יכולה לחלץ את הרכיב החתום. יכול להיות שהערך הזה יהיה שונה או זהה לערך של XPath עבור AssertionXPath.
TrustStore
השם של TrustStore שמכיל אישורי X.509 מהימנים שמשמשים לאימות חתימות דיגיטליות בטענות נכונות של SAML.
RemoveAssertion
ערך בוליאני שאפשר להגדיר כ-true או כ-false. כשערך המשתנה הוא true, טענת ה-SAML תוסר מהודעת הבקשה לפני שההודעה תועבר לשירות העורפי.

הערות שימוש

במפרט של Security Assertion Markup Language ‏ (SAML) מוגדרים פורמטים ופרוטוקולים שמאפשרים לאפליקציות להחליף מידע בפורמט XML לצורך אימות והרשאה.

'טענת אבטחה' היא אסימון מהימן שמתאר מאפיין של אפליקציה, של משתמש באפליקציה או של משתתף אחר בעסקה. הצהרות אבטחה מנוהלות ומשמשות שני סוגים של ישויות:

  • ספקי זהויות: יצירת הצהרות אבטחה בשם המשתתפים
  • ספקי שירותים: מאמתים הצהרות אבטחה באמצעות יחסי אמון עם ספקי זהויות

פלטפורמת ה-API יכולה לשמש כספק זהויות וכספק שירות. הוא פועל כספק זהויות על ידי יצירת הצהרות וצירופן להודעות בקשה, וכך מאפשר לשירותים בקצה העורפי לעבד את ההצהרות האלה. הוא פועל כספק שירות על ידי אימות הצהרות בהודעות בקשה נכנסות.

סוג המדיניות SAML תומך בטענות נכוֹנוּת של SAML שתואמות לגרסה 2.0 של מפרט הליבה של SAML ולגרסה 1.0 של מפרט פרופיל האסימון של WS-Security SAML.

יצירת טענת נכוֹנוּת של SAML

עיבוד המדיניות:

  1. אם ההודעה היא לא XML, והערך של IgnoreContentType הוא לא true, אז מועלית תקלה.
  2. אם הערך של Template הוא template, המערכת מעבדת את התבנית כמו שמתואר במדיניות AssignMessage. אם חסרים משתנים כלשהם והמאפיין IgnoreUnresolvedVariables לא מוגדר, תופעל שגיאה.
  3. אם לא מוגדר 'תבנית', צריך ליצור טענה שכוללת את הערכים של הפרמטרים Subject ו-Issuer או את ההפניות שלהם.
  4. חתימה על הטענה באמצעות המפתח שצוין.
  5. הוספת הטענה להודעה ב-XPath שצוין.

אימות הצהרת SAML

עיבוד המדיניות:

  1. המדיניות בודקת את ההודעה הנכנסת כדי לוודא שסוג המדיה של הבקשה הוא XML. הבדיקה מתבצעת על ידי השוואה בין סוג התוכן לפורמטים text/(.*+)?xml או application/(.*+)?xml. אם סוג המדיה הוא לא XML והמדיניות <IgnoreContentType> לא מוגדרת, המדיניות תגרום לשגיאה.
  2. המדיניות תנתח את ה-XML. אם הניתוח נכשל, תופעל שגיאה.
  3. המדיניות תחלץ את הרכיב החתום ואת הטענה באמצעות ערכי ה-XPath המתאימים שצוינו (<SignedElementXPath> ו-<AssertionXPath>). אם אחד מהנתיבים האלה לא יחזיר רכיב, המדיניות תעלה תקלה.
  4. המדיניות תאמת שה-Assertion זהה לרכיב החתום, או שהוא צאצא של הרכיב החתום. אם זה לא נכון, המדיניות תגרום לשגיאה.
  5. אם אחד מהרכיבים <NotBefore> או <NotOnOrAfter> מופיע בטענת הנכוֹנוּת, המדיניות תבדוק את חותמת הזמן הנוכחית מול הערכים האלה, כמו שמתואר בקטע 2.5.1 של SAML Core.
  6. המדיניות תחול על כללים נוספים לעיבוד ה'תנאים' כפי שמתואר בקטע 2.5.1.1 של SAML Core.
  7. המדיניות מאמתת את החתימה הדיגיטלית של ה-XML באמצעות ערך מאגר האישורים (<TrustStore>) שמתואר למעלה. אם האימות נכשל, המדיניות יוצרת שגיאה.

אחרי שהמדיניות מסתיימת בלי להעלות תקלה, המפתח של ה-proxy יכול להיות בטוח בדברים הבאים:

  • החתימה הדיגיטלית בטענה תקפה ונחתמה על ידי רשות אישורים מהימנה
  • ההצהרה תקפה לתקופת הזמן הנוכחית
  • הנושא והגורם המנפיק של הטענה יחולצו ויוגדרו במשתני הזרימה. המדיניות האחרות אחראיות לשימוש בערכים האלה לאימות נוסף, כמו בדיקה ששם הנושא תקין או העברה שלו למערכת יעד לצורך אימות.

אפשר להשתמש במדיניות אחרת, כמו ExtractVariables, כדי לנתח את ה-XML הגולמי של הטענה לצורך אימות מורכב יותר.


משתני זרימה

יש הרבה סוגי מידע שאפשר לציין בהצהרת SAML. טענת הנכונות (assertion) של SAML היא קובץ XML שאפשר לנתח באמצעות מדיניות ExtractVariables ומנגנונים אחרים כדי להטמיע אימותים מורכבים יותר.

משתנה תיאור
saml.id מזהה טענת הנכוֹנוּת (assertion) של SAML
saml.issuer הערך של 'הנפקן' של הטענה, שהומר מסוג XML מקורי למחרוזת
saml.subject הנושא של הטענה, שהומר מסוג XML מקורי למחרוזת
saml.valid הפונקציה מחזירה את הערך True או False בהתאם לתוצאה של בדיקת התוקף
saml.issueInstant IssueInstant
saml.subjectFormat פורמט הנושא
saml.scmethod שיטת אישור הנושא
saml.scdaddress כתובת נתוני האישור של הנושא
saml.scdinresponse נתוני אישור הנושא בתגובה
saml.scdrcpt מי יקבלו הודעות לאישור בקשות גישה
saml.authnSnooa ‫AuthnStatement SessionNotOnOrAfter
saml.authnContextClassRef AuthnStatement AuthnContextClassRef
saml.authnInstant ‫AuthnStatement AuthInstant
saml.authnSessionIndex אינדקס הסשן של AuthnStatement

הפניה לשגיאה

בקטע הזה מתוארים קודי התקלה והודעות השגיאה שהוחזרו ומשתני השגיאה שמוגדרים על ידי Edge כשהמדיניות הזו גורמת לשגיאה. חשוב לדעת את המידע הזה אם אתם מפתחים כללי כשל כדי לטפל בתקלות. מידע נוסף זמין במאמר מה צריך לדעת? מידע על שגיאות שקשורות למדיניות וטיפול פגמים.

שגיאות פריסה

השגיאות האלו עשויות להתרחש כאשר פורסים שרת proxy שמכיל את המדיניות הזו.

שם השגיאה סיבה תיקון
SourceNotConfigured אחד או יותר מהרכיבים הבאים בהצהרה של אימות SAML המדיניות לא מוגדרת או ריקה: <Source>, <XPath>, <Namespaces>, <Namespace>.
TrustStoreNotConfigured אם הרכיב <TrustStore> ריק או לא מצוין אימות מדיניות SAMLAssertion, הפריסה של שרת ה-proxy ל-API נכשלת. דרושה Trust Store חוקית.
NullKeyStoreAlias אם רכיב הצאצא <Alias> ריק או לא מצוין ברכיב <Keystore> של יצירת מדיניות טענת נכוֹנוּת (assertion) של SAML, ואז הפריסה של ה-API שרת ה-proxy נכשל. נדרש כינוי חוקי של Keystore.
NullKeyStore אם רכיב הצאצא <Name> ריק או לא מצוין ברכיב <Keystore> של מדיניות GenerateSAMLAssertion ואז הפריסה של ה-API שרת ה-proxy נכשל. נדרש שם חוקי של מאגר מפתחות.
NullIssuer אם הרכיב <Issuer> ריק או לא מצוין ב-Generate SAML מדיניות טענת נכוֹנוּת (assertion), גם אם הפריסה של שרת ה-proxy ל-API נכשלת. א' נדרש ערך <Issuer> חוקי.

משתני כשל

המשתנים האלה מוגדרים כשמתרחשת שגיאה בסביבת זמן הריצה. מידע נוסף זמין במאמר מה צריך לדעת? על שגיאות שקשורות למדיניות.

משתנים איפה דוגמה
fault.name="fault_name" fault_name הוא שם השגיאה. שם השגיאה הוא החלק האחרון בקוד השגיאה. fault.name = "InvalidMediaTpe"
GenerateSAMLAssertion.failed בשביל הגדרה של מדיניות אימות של טענת נכוֹנוּת (assertion) של 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>

נושאים קשורים

חילוץ משתנים: Extract Variables policy