מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
מה
יוצר JWS חתום, עם קבוצת הצהרות שניתנות להגדרה. לאחר מכן אפשר להחזיר את ה-JWS לקוחות מסוימים, משודרים ליעדים בקצה העורפי או משמשים בדרכים אחרות. מבוא מפורט זמין במאמר סקירה כללית של המדיניות של JWS ו-JWT.
לקבלת מידע על החלקים של JWS ועל אופן ההצפנה והחתימה שלהם, עיינו ב RFC7515.
וידאו
כדאי לצפות בסרטון קצר כדי ללמוד איך יוצרים אסימון JWT חתום. אומנם הסרטון הזה ספציפיים ליצירת JWT, רבים מהמושגים זהים ב-JWS.
דוגמאות
יצירת JWS מצורף חתום באמצעות HS256 אלגוריתם
המדיניות לדוגמה הזו יוצרת JWS מצורף וחותמת עליו באמצעות האלגוריתם HS256. HS256 מסתמך בסוד משותף בשביל חתימה ואימות של החתימה.
קובץ JWS מצורף מכיל את הכותרת, המטען הייעודי (payload) והחתימה המקודדים:
header.payload.signature
כדי ליצור תוכן בנפרד, צריך להגדיר את <DetachContent>
כ-True.
אפשר לקרוא מידע נוסף בקטע חלקים של JWS/JWT.
במבנה ובפורמט של JWS.
משתמשים ברכיב <Payload>
כדי לציין את המטען הייעודי (payload) של ה-JWS הגולמי ללא הקידוד.
בדוגמה הזו, משתנה מכיל את המטען הייעודי (Payload). כשפעולת המדיניות הזו מופעלת,
Edge מקודד את הכותרת ואת המטען הייעודי (payload) של ה-JWS ואז מוסיף את החתימה המקודדת כדי לחתום על ה-JWS באופן דיגיטלי.
בהגדרת המדיניות שבהמשך, נוצר JWS ממטען ייעודי (payload) שכלול במשתנה.
private.payload
<GenerateJWS name="JWS-Generate-HS256"> <DisplayName>JWS Generate HS256</DisplayName> <Algorithm>HS256</Algorithm> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <SecretKey> <Value ref="private.secretkey"/> <Id>1918290</Id> </SecretKey> <Payload ref="private.payload" /> <OutputVariable>jws-variable</OutputVariable> </GenerateJWS>
יצירה של JWS מנותק החתום באמצעות RS256 אלגוריתם
המדיניות לדוגמה הזו יוצרת JWS נפרד וחותמת עליו באמצעות האלגוריתם RS256. יוצר חתימת RS256 מסתמכת על מפתח פרטי RSA, שחייב להיות בפורמט מקודד PEM.
JWS מנותק משמיט את המטען הייעודי (payload) מה-JWS:
header..signature
משתמשים ברכיב <Payload>
כדי לציין את המטען הייעודי (payload) של ה-JWS הגולמי ללא הקידוד.
כשהמדיניות הזו מופעלת, Edge מקודד את הכותרת ואת המטען הייעודי (payload) של ה-JWS.
ואז משתמש בהם כדי ליצור את החתימה המקודדת. עם זאת, ה-JWS שנוצר משמיט את המטען הייעודי (payload).
באחריותך להעביר את המטען הייעודי (payload) למדיניות VerifyJWS באמצעות
רכיב <DetachedContent>
של מדיניות VerifyJWS.
<GenerateJWS name="JWS-Generate-RS256"> <DisplayName>JWS Generate RS256</DisplayName> <Algorithm>RS256</Algorithm> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <PrivateKey> <Value ref="private.privatekey"/> <Password ref="private.privatekey-password"/> <Id ref="private.privatekey-id"/> </PrivateKey> <Payload ref="private.payload" /> <DetachContent>true</DetachContent> <OutputVariable>jws-variable</OutputVariable> </GenerateJWS>
הגדרת הרכיבים העיקריים
הרכיבים שבהם משתמשים כדי לציין את המפתח המשמש ליצירת ה-JWS תלויים באלגוריתם שנבחר, כפי שמוצג בטבלה הבאה:
אלגוריתם | אלמנטים מרכזיים | |
---|---|---|
HS{256/384/512}* | <SecretKey> <Value ref="private.secretkey"/> <Id>1918290</Id> </SecretKey> |
|
RS/PS/ES{256/384/512}* | <PrivateKey> <Value ref="private.privatekey"/> <Password ref="private.privatekey-password"/> <Id ref="private.privatekey-id"/> </PrivateKey> הרכיבים |
|
*מידע נוסף על הדרישות העיקריות זמין מידע על אלגוריתמים להצפנת חתימות |
חומר עזר של רכיב ליצירת JWS
בחומר העזר בנושא המדיניות מתוארים הרכיבים והמאפיינים של המדיניות 'יצירת JWS'.
הערה: ההגדרות האישיות משתנות מעט בהתאם להצפנה באלגוריתם שבו אתם משתמשים. בקטע דוגמאות תוכלו לראות דוגמאות שממחישות ולהתאים אותם אישית לתרחישים לדוגמה ספציפיים.
מאפיינים החלה על הרכיב ברמה העליונה
<GenerateJWS name="JWS" continueOnError="false" enabled="true" async="false">
המאפיינים הבאים משותפים לכל רכיבי ההורה של המדיניות.
מאפיין | תיאור | ברירת מחדל | נוכחות |
---|---|---|---|
שם |
השם הפנימי של המדיניות. תווים שבהם אפשר להשתמש בשם מוגבלים ל:
A-Z0-9._\-$ % עם זאת, בממשק המשתמש לניהול Edge אוכפים פקודות נוספות
הגבלות, כגון הסרה אוטומטית של תווים שאינם אלפאנומריים.
אפשר להשתמש ברכיב |
לא רלוונטי | חובה |
continueOnError |
צריך להגדיר את הערך false כדי להחזיר שגיאה כשמדיניות נכשלת. המצב הזה צפוי
של רוב כללי המדיניות.
יש להגדיר ל- |
false | אופציונלי |
פעיל |
צריך להגדיר את הערך true כדי לאכוף את המדיניות.
הגדרת הערך |
true | אופציונלי |
אסינכרוני | המאפיין הזה הוצא משימוש. | false | הוצא משימוש |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
שימוש בנוסף למאפיין השם כדי להוסיף תווית למדיניות בעורך ה-Proxy של ממשק המשתמש לניהול בשם אחר בשפה טבעית.
ברירת מחדל | אם משמיטים את הרכיב הזה, המערכת תשתמש בערך של מאפיין השם של המדיניות. |
נוכחות | אופציונלי |
סוג | מחרוזת |
<Algorithm>
<Algorithm>algorithm-here</Algorithm>
מציינת את אלגוריתם ההצפנה לצורך חתימה על האסימון.
ברירת מחדל | לא רלוונטי |
נוכחות | חובה |
סוג | מחרוזת |
ערכים חוקיים | HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512 |
<AdditionalHeaders/Claim>
<AdditionalHeaders> <Claim name='claim1'>explicit-value-of-claim-here</Claim> <Claim name='claim2' ref='variable-name-here'/> <Claim name='claim3' ref='variable-name-here' type='boolean'/> <Claim name='claim4' ref='variable-name' type='string' array='true'/> </AdditionalHeaders>
הוספת הצמדים הנוספים של שם/ערך להצהרה בכותרת של ה-JWS.
ברירת מחדל | לא רלוונטי |
נוכחות | אופציונלי |
ערכים חוקיים | כל ערך שרוצים להשתמש בו להצהרה נוספת. אפשר לציין את ההצהרה המפורשת כמחרוזת, מספר, ערך בוליאני, מפה או מערך. |
הרכיב <Claim>
לוקח את המאפיינים הבאים:
- name – (חובה) שם התלונה.
- ref - (אופציונלי) השם של משתנה זרימה. אם השדה הזה קיים, המדיניות תשתמש בערך בתור ההצהרה. אם ציינתם גם מאפיין ref וגם ערך הצהרה מפורש, הערך של הפרמטר ערך מפורש הוא ברירת המחדל, ויש להשתמש בו אם משתנה הזרימה המופנה לא מפוענח.
- type – (אופציונלי) אחת מהאפשרויות: מחרוזת (ברירת מחדל), מספר, ערך בוליאני או מפה
- מערך – (אופציונלי) מגדירים את הערך true כדי לציין אם הערך הוא מערך של סוגים. ברירת מחדל: לא נכון.
<CriticalHeaders>
<CriticalHeaders>a,b,c</CriticalHeaders> or: <CriticalHeaders ref=’variable_containing_headers’/>
מוסיף את הכותרת הקריטית, crit, ל-JWS. הכותרת crit הוא מערך של שמות כותרות שמקלט ה-JWS צריך להיות מוכר ולזהות אותם. לדוגמה:
{ “typ: “...”, “alg” : “...”, “crit” : [ “a”, “b”, “c” ], }
בזמן הריצה, המדיניות שלVerifyJWS בודקת את הכותרת של crit.
בכל כותרת שמופיעה בכותרת crit, המערכת בודקת שהרכיב <KnownHeaders>
של מדיניות VerifyJWS כוללת גם את הכותרת הזו. כל כותרת שמופיעה במדיניות VerifyJWS ב-crit
שלא מופיע גם ב-<KnownHeaders>
, גורמת למדיניות VerifyJWS להיכשל.
ברירת מחדל | לא רלוונטי |
נוכחות | אופציונלי |
סוג | מערך מחרוזות מופרדות בפסיקים |
ערכים חוקיים | מערך או שם של משתנה שמכיל את המערך. |
<DetachContent>
<DetachContent>true|false</DetachContent>
המדיניות מציינת אם ליצור את ה-JWS עם מטען ייעודי (payload) מנותק, <DetachContent>true</DetachContent>
,
או לא, <DetachContent>false</DetachContent>
.
אם מציינים False, ברירת המחדל, ה-JWS שנוצר מופיע בצורה הבאה:
header.payload.signature
אם מציינים True כדי ליצור מטען ייעודי (payload) מנותק, ה-JWS שנוצר משמיט את המטען הייעודי (Payload) והוא מופיע בפורמט הבא:
header..signature
אם משתמשים במטען ייעודי (payload) מנותק, באחריותך להעביר את המטען הייעודי (payload) המקורי שאינו מקודד למדיניות בנושא VerifyJWS.
באמצעות הרכיב <DetachedContent>
של המדיניות VerifyJWS.
ברירת מחדל | false |
נוכחות | אופציונלי |
סוג | בוליאני |
ערכים חוקיים | נכון או לא נכון |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
יש להגדיר את הערך כ-False אם רוצים שהמדיניות תגרור שגיאה כשמצוין משתנה כלשהו שאליו יש הפניה במדיניות לא ניתן לפתור. יש להגדיר את הערך כ-True כדי להתייחס לכל משתנה שלא ניתן לפתרון כמחרוזת ריקה (null).
ברירת מחדל | false |
נוכחות | אופציונלי |
סוג | בוליאני |
ערכים חוקיים | נכון או לא נכון |
<OutputVariable>
<OutputVariable>JWS-variable</OutputVariable>
מציינת איפה למקם את ה-JWS שנוצר באמצעות המדיניות הזו. כברירת מחדל הוא ממוקם
משתנה הזרימה jws.POLICYNAME.generated_jws
.
ברירת מחדל | jws.POLICYNAME.generated_jws |
נוכחות | אופציונלי |
סוג | מחרוזת (שם של משתנה זרימה) |
<Payload>
<Payload ref="flow-variable-name-here" /> or <Payload>payload-value</Payload>
מציינת את המטען הייעודי (payload) הגולמי של ה-JWS, ללא קידוד. מציינים משתנה שמכיל את המטען הייעודי (payload) או מחרוזת.
ברירת מחדל | לא רלוונטי |
נוכחות | חובה |
סוג | מחרוזת, מערך בייטים, סטרימינג או כל ייצוג אחר של המטען הייעודי (payload) של JWS ללא קידוד. |
<PrivateKey/Id>
<PrivateKey> <Id ref="flow-variable-name-here"/> </PrivateKey> or <PrivateKey> <Id>your-id-value-here</Id> </PrivateKey>
מציינת את מזהה המפתח (ילד) שצריך לכלול בכותרת ה-JWS. שימוש בלבד כשהאלגוריתם הוא RS256/RS384/RS512, PS256/PS384/PS512, או ES256/ES384/ES512.
ברירת מחדל | לא רלוונטי |
נוכחות | אופציונלי |
סוג | מחרוזת |
ערכים חוקיים | משתנה או מחרוזת בזרימה |
<PrivateKey/Password>
<PrivateKey> <Password ref="private.privatekey-password"/> </PrivateKey>
מציינים את הסיסמה שתשמש את המדיניות לפענוח המפתח הפרטי, במקרה הצורך. משתמשים ב ref כדי להעביר את המפתח במשתנה זרימה. שימוש בלבד כשהאלגוריתם הוא RS256/RS384/RS512, PS256/PS384/PS512, או ES256/ES384/ES512.
ברירת מחדל | לא רלוונטי |
נוכחות | אופציונלי |
סוג | מחרוזת |
ערכים חוקיים |
הפניה למשתנה זרימה.
הערה: חובה לציין משתנה זרימה. אפליקציית Edge תידחה כלא תקינה
של המדיניות שבה הסיסמה מצוינת בטקסט ללא הצפנה. משתנה הזרימה
חייב לכלול את התחילית "private". לדוגמה, |
<PrivateKey/Value>
<PrivateKey> <Value ref="private.variable-name-here"/> </PrivateKey>
מציינת מפתח פרטי בקידוד PEM שמשמש לחתימה על ה-JWS. השתמשו במאפיין ref כדי להעביר את במשתנה הזרימה. יש להשתמש רק כאשר האלגוריתם הוא אחד מהערכים RS256/RS384/RS512, PS256/PS384/PS512, או ב-ES256/ES384/ES512.
ברירת מחדל | לא רלוונטי |
נוכחות | נדרש ליצירת JWS באמצעות האלגוריתם RS256. |
סוג | מחרוזת |
ערכים חוקיים |
משתנה זרימה שמכיל מחרוזת שמייצגת ערך מפתח פרטי של RSA בקידוד PEM.
הערה: משתנה הזרימה חייב לכלול את התחילית "private". לדוגמה,
|
<SecretKey/Id>
<SecretKey> <Id ref="flow-variable-name-here"/> </SecretKey> or <SecretKey> <Id>your-id-value-here</Id> </SecretKey>
מציינת את מזהה המפתח (ילד) שצריך לכלול בכותרת ה-JWS של מסמך JWS שנחתם באמצעות HMAC באלגוריתם כלשהו. יש להשתמש באפשרות הזו רק כאשר האלגוריתם הוא אחד מהפרמטרים הבאים: HS256/HS384/HS512.
ברירת מחדל | לא רלוונטי |
נוכחות | אופציונלי |
סוג | מחרוזת |
ערכים חוקיים | משתנה או מחרוזת בזרימה |
<SecretKey/Value>
<SecretKey> <Value ref="private.your-variable-name"/> </SecretKey>
מספקת את המפתח הסודי המשמש לאימות אסימונים או לחתימה עליהם באמצעות אלגוריתם HMAC. שימוש בלבד כשהאלגוריתם הוא אחד משדות HS256/HS384/HS512. שימוש במאפיין ref כדי להעביר את המפתח במשתנה זרימה.
Edge אוכף חוזק מפתח מינימלי באלגוריתמים HS256/HS384/HS512. האורך המינימלי של המפתח ל-HS256 המספר הוא 32 בייט, ל-HS384 הוא 48 בייט ול-HS512 הוא 64 בייט. שימוש במפתח בעוצמה נמוכה יותר גורם לשגיאה בתחילת ההפעלה.
ברירת מחדל | לא רלוונטי |
נוכחות | נדרש לאלגוריתמים של HMAC. |
סוג | מחרוזת |
ערכים חוקיים |
משתנה זרימה שמפנה למחרוזת
הערה: אם משתנה זרימה, התחילית שלו חייבת להיות 'private'. עבור
לדוגמה, |
משתני זרימה
המדיניות Generate JWS לא מגדירה משתני זרימה.
התייחסות לשגיאות
בקטע הזה מתוארים קודי התקלות והודעות השגיאה שמוחזרים, ומשתני השגיאה שמוגדרים על ידי Edge כשהמדיניות הזו גורמת לשגיאה. חשוב לדעת את המידע הזה אם אתם מפתחים כללים לטיפול בתקלות. תוכלו למצוא מידע נוסף במאמרים מה צריך לדעת לגבי שגיאות מדיניות וטיפול בפגמים.
שגיאות בזמן ריצה
השגיאות האלה יכולות להתרחש כשהמדיניות מופעלת.
קוד שגיאה | סטטוס HTTP | מופיע כאשר |
---|---|---|
steps.jws.GenerationFailed |
401 | המדיניות לא הצליחה ליצור את ה-JWS. |
steps.jws.InsufficientKeyLength |
401 | למפתח קטן מ-32 בייטים לאלגוריתם HS256 |
steps.jws.InvalidClaim |
401 | כאשר חסרה תלונה על הפרת זכויות יוצרים או תלונה על הפרת זכויות יוצרים, או חוסר התאמה בכותרת או בכותרת חסרה. |
steps.jws.InvalidCurve |
401 | העקומה שצוינה על ידי המפתח אינה חוקית עבור האלגוריתם 'עקומה אליפטית'. |
steps.jws.InvalidJsonFormat |
401 | נמצא JSON לא חוקי בכותרת ה-JWS. |
steps.jws.InvalidPayload |
401 | המטען הייעודי של JWS לא חוקי. |
steps.jws.InvalidSignature |
401 | <DetachedContent> לא נכלל וב-JWS יש מטען ייעודי (payload) נפרד. |
steps.jws.KeyIdMissing |
401 | במדיניות האימות נעשה שימוש ב-JWKS כמקור למפתחות ציבוריים, אבל ה-JWS החתום
לא כולל נכס kid בכותרת. |
steps.jws.KeyParsingFailed |
401 | לא ניתן היה לנתח את המפתח הציבורי מפרטי המפתח שצוינו. |
steps.jws.MissingPayload |
401 | המטען הייעודי של JWS חסר. |
steps.jws.NoAlgorithmFoundInHeader |
401 | מופיע כשה-JWS משמיטה את כותרת האלגוריתם. |
steps.jws.SigningFailed |
401 | ב-GenerateJWS, למפתח שגודלו קטן מהגודל המינימלי לאלגוריתמים HS384 או HS512 |
steps.jws.UnknownException |
401 | אירעה חריגה לא ידועה. |
steps.jws.WrongKeyType |
401 | צוין סוג שגוי של מפתח. לדוגמה, אם ציינת מפתח RSA לאלגוריתם Elliptic Curve, או מפתח עקומה לאלגוריתם RSA. |
שגיאות בפריסה
השגיאות האלה יכולות להתרחש כשפורסים שרת proxy שכולל את המדיניות הזו.
שם השגיאה | מופיע כאשר |
---|---|
InvalidAlgorithm |
הערכים החוקיים היחידים הם: RS256, RS384, RS512, PS256, PS384, PS512, ES256, ES384, ES512, HS256, HS384, HS512. |
|
שגיאות אפשריות אחרות בפריסה. |
משתני כשל
המשתנים האלה מוגדרים כשמתרחשת שגיאה בסביבת זמן הריצה. מידע נוסף זמין במאמר מה צריך לדעת? על שגיאות שקשורות למדיניות.
משתנים | איפה | דוגמה |
---|---|---|
fault.name="fault_name" |
fault_name הוא שם השגיאה, כפי שמצוין בטבלה שגיאות זמן ריצה שלמעלה. שם השגיאה הוא החלק האחרון בקוד השגיאה. | fault.name Matches "TokenExpired" |
JWS.failed |
כל כללי המדיניות של JWS מגדירים את אותו משתנה במקרה של כשל. | jws.JWS-Policy.failed = true |
דוגמה לתגובת שגיאה
לטיפול בשגיאות, השיטה המומלצת היא להעתיק את החלק errorcode
של השגיאה
תשובה. אין להסתמך על הטקסט שבfaultstring
, כי הוא עשוי להשתנות.
דוגמה לכלל שגוי
<FaultRules> <FaultRule name="JWS Policy Errors"> <Step> <Name>JavaScript-1</Name> <Condition>(fault.name Matches "TokenExpired")</Condition> </Step> <Condition>JWS.failed=true</Condition> </FaultRule> </FaultRules>