אתם צופים במסמכי התיעוד של 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
עיבוד המדיניות:
- אם ההודעה היא לא XML, והערך של IgnoreContentType הוא לא
true, אז מועלית תקלה. - אם הערך של Template הוא template, המערכת מעבדת את התבנית כמו שמתואר במדיניות AssignMessage. אם חסרים משתנים כלשהם והמאפיין IgnoreUnresolvedVariables לא מוגדר, תופעל שגיאה.
- אם לא מוגדר 'תבנית', צריך ליצור טענה שכוללת את הערכים של הפרמטרים Subject ו-Issuer או את ההפניות שלהם.
- חתימה על הטענה באמצעות המפתח שצוין.
- הוספת הטענה להודעה ב-XPath שצוין.
אימות הצהרת SAML
עיבוד המדיניות:
- המדיניות בודקת את ההודעה הנכנסת כדי לוודא שסוג המדיה של הבקשה הוא XML. הבדיקה מתבצעת על ידי השוואה בין סוג התוכן לפורמטים
text/(.*+)?xmlאוapplication/(.*+)?xml. אם סוג המדיה הוא לא XML והמדיניות<IgnoreContentType>לא מוגדרת, המדיניות תגרום לשגיאה. - המדיניות תנתח את ה-XML. אם הניתוח נכשל, תופעל שגיאה.
- המדיניות תחלץ את הרכיב החתום ואת הטענה באמצעות ערכי ה-XPath המתאימים שצוינו (
<SignedElementXPath>ו-<AssertionXPath>). אם אחד מהנתיבים האלה לא יחזיר רכיב, המדיניות תעלה תקלה. - המדיניות תאמת שה-Assertion זהה לרכיב החתום, או שהוא צאצא של הרכיב החתום. אם זה לא נכון, המדיניות תגרום לשגיאה.
- אם אחד מהרכיבים
<NotBefore>או<NotOnOrAfter>מופיע בטענת הנכוֹנוּת, המדיניות תבדוק את חותמת הזמן הנוכחית מול הערכים האלה, כמו שמתואר בקטע 2.5.1 של SAML Core. - המדיניות תחול על כללים נוספים לעיבוד ה'תנאים' כפי שמתואר בקטע 2.5.1.1 של SAML Core.
- המדיניות מאמתת את החתימה הדיגיטלית של ה-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>.
|
build |
TrustStoreNotConfigured |
אם הרכיב <TrustStore> ריק או לא מצוין
אימות מדיניות SAMLAssertion, הפריסה של שרת ה-proxy ל-API נכשלת.
דרושה Trust Store חוקית.
|
build |
NullKeyStoreAlias |
אם רכיב הצאצא <Alias> ריק או לא מצוין ברכיב <Keystore>
של יצירת מדיניות טענת נכוֹנוּת (assertion) של SAML, ואז הפריסה של ה-API
שרת ה-proxy נכשל. נדרש כינוי חוקי של Keystore.
|
build |
NullKeyStore |
אם רכיב הצאצא <Name> ריק או לא מצוין ברכיב <Keystore>
של מדיניות GenerateSAMLAssertion ואז הפריסה של ה-API
שרת ה-proxy נכשל. נדרש שם חוקי של מאגר מפתחות.
|
build |
NullIssuer |
אם הרכיב <Issuer> ריק או לא מצוין ב-Generate SAML
מדיניות טענת נכוֹנוּת (assertion), גם אם הפריסה של שרת ה-proxy ל-API נכשלת. א'
נדרש ערך <Issuer> חוקי.
|
build |
משתני כשל
המשתנים האלה מוגדרים כשמתרחשת שגיאה בסביבת זמן הריצה. מידע נוסף זמין במאמר מה צריך לדעת? על שגיאות שקשורות למדיניות.
| משתנים | איפה | דוגמה |
|---|---|---|
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