כרגע מוצג התיעוד של 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 זמין במאמר חלקים של JWS/JWT.
צריך להשתמש ברכיב <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 מנותק מה-JWS, משמט את המטען הייעודי (payload):
header..signature
צריך להשתמש ברכיב <Payload>
כדי לציין את המטען הייעודי (payload) הגולמי והלא מקודד של JWS.
כשהמדיניות הזו מופעלת, Edge מקודד את הכותרת והמטען הייעודי (payload) של JWS,
ואז משתמש בהם כדי ליצור את החתימה המקודדת. עם זאת, ה-JWS שנוצר משמט את המטען הייעודי (payload).
באחריותך להעביר את המטען הייעודי (payload) למדיניות verificationJWS באמצעות
הרכיב <DetachedContent>
של המדיניות ValidJWS.
<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> הרכיבים |
|
*מידע נוסף על הדרישות העיקריות זמין במאמר מידע על אלגוריתמים להצפנת חתימות. |
הפניה לרכיב עבור Generate JWS
בהפניה למדיניות מתוארים הרכיבים והתכונות של המדיניות Generate JWS.
הערה: ההגדרה משתנה בהתאם לאלגוריתם ההצפנה שבו אתם משתמשים. בקטע דוגמאות מופיעות דוגמאות שממחישות הגדרות לתרחישי שימוש ספציפיים.
מאפיינים שחלים על הרכיב ברמה העליונה
<GenerateJWS name="JWS" continueOnError="false" enabled="true" async="false">
המאפיינים הבאים משותפים לכל רכיבי ההורה של המדיניות.
מאפיין | תיאור | ברירת מחדל | נוכחות |
---|---|---|---|
name |
השם הפנימי של המדיניות. התווים שאפשר להשתמש בהם בשם מוגבלים ל:
A-Z0-9._\-$ % . אבל בממשק המשתמש לניהול Edge אוכפים הגבלות נוספות, כמו הסרה אוטומטית של תווים שהם לא אלפאנומריים.
אפשר להשתמש באלמנט |
לא רלוונטי | חובה |
continueOnError |
צריך להגדיר את הערך false כדי להחזיר שגיאה במקרה של כישלון במדיניות. זו התנהגות צפויה
ברוב כללי המדיניות.
צריך להגדיר את הערך |
false | אופציונלי |
פעיל |
צריך להגדיר את הערך true כדי לאכוף את המדיניות.
צריך להגדיר את הערך |
true | אופציונלי |
async | המאפיין הזה הוצא משימוש. | 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 - (אופציונלי) אחד מהערכים הבאים: מחרוזת (ברירת מחדל), מספר, בוליאני או מפה
- array – (אופציונלי) מגדירים את הערך true כדי לציין אם הערך הוא מערך של סוגים. ברירת מחדל: False.
<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>
של המדיניות ValidJWS מפרט גם את הכותרת הזו. כל כותרת שמדיניות verificationJWS מוצאת ב-crit
שלא מופיעה גם ב-<KnownHeaders>
תגרום למדיניות verificationJWS להיכשל.
ברירת מחדל | לא רלוונטי |
נוכחות | אופציונלי |
סוג | מערך של מחרוזות שמופרדות בפסיקים |
ערכים חוקיים | מערך או שם המשתנה שמכיל את המערך. |
<DetachContent>
<DetachContent>true|false</DetachContent>
המדיניות קובעת אם ליצור את ה-JWS עם מטען ייעודי (payload) נפרד, <DetachContent>true</DetachContent>
או לא, <DetachContent>false</DetachContent>
.
אם מציינים False, ברירת המחדל של ה-JWS שנוצרת תהיה בפורמט הבא:
header.payload.signature
אם מציינים את הערך true כדי ליצור מטען ייעודי (payload), ה-JWS שנוצר משמט את המטען הייעודי ומופיע בתבנית הבאה:
header..signature
אם המטען הייעודי מנותק, אתם יכולים להעביר את המטען הייעודי (payload) המקורי הלא מקודד אל המדיניות של VerifyJWS באמצעות הרכיב <DetachedContent>
של המדיניות ValidJWS.
ברירת מחדל | 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>