אתם צופים במסמכי התיעוד של Apigee Edge.
כדאי לעיין במסמכי התיעוד של Apigee X. מידע
מה
יוצר JWT חתום, עם קבוצה של טענות שאפשר להגדיר. אחר כך אפשר להחזיר את ה-JWT ללקוחות, להעביר אותו ליעדי קצה עורפיים או להשתמש בו בדרכים אחרות. מידע מפורט זמין במאמר סקירה כללית של מדיניות JWS ו-JWT.
וידאו
כדאי לצפות בסרטון קצר כדי ללמוד איך ליצור JWT חתום.
דוגמאות
יצירת JWT חתום באמצעות אלגוריתם HS256
מדיניות לדוגמה שיוצרת JWT חדש וחותמת עליו באמצעות האלגוריתם HS256. HS256 מסתמך על סוד לשימוש עם טוקן צרכן גם לחתימה וגם לאימות החתימה.
כשהפעולה הזו של המדיניות מופעלת, Edge מקודד את הכותרת ואת המטען הייעודי (payload) של ה-JWT, ואז חותם על ה-JWT באופן דיגיטלי. בדוגמה המלאה שבסרטון שלמעלה מוסבר איך לשלוח בקשה בנוגע למדיניות.
הגדרת המדיניות כאן תיצור אסימון JWT עם קבוצה של הצהרות סטנדרטיות כפי שהוגדר במפרט של JWT, כולל תפוגה של שעה, וגם הצהרה נוספת. אפשר לכלול כמה טענות נוספות שרוצים. בקטע 'הפניה לרכיב' מפורטות הדרישות והאפשרויות של כל רכיב במדיניות לדוגמה הזו.
<GenerateJWT name="JWT-Generate-HS256"> <DisplayName>JWT Generate HS256</DisplayName> <Algorithm>HS256</Algorithm> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <SecretKey> <Value ref="private.secretkey"/> <Id>1918290</Id> </SecretKey> <ExpiresIn>1h</ExpiresIn> <Subject>monty-pythons-flying-circus</Subject> <Issuer>urn://apigee-edge-JWT-policy-test</Issuer> <Audience>fans</Audience> <Id/> <AdditionalClaims> <Claim name="show">And now for something completely different.</Claim> </AdditionalClaims> <OutputVariable>jwt-variable</OutputVariable> </GenerateJWT>
הכותרת של ה-JWT שיתקבל תהיה …
{
"typ" : "JWT",
"alg" : "HS256",
"kid" : "1918290"
}… ויכלול מטען ייעודי (payload) עם תוכן שנראה בערך כך:
{
"sub" : "monty-pythons-flying-circus",
"iss" : "urn://apigee-edge-JWT-policy-test",
"aud" : "show",
"iat" : 1506553019,
"exp" : 1506556619,
"jti" : "BD1FF263-3D25-4593-A685-5EC1326E1F37",
"show": "And now for something completely different."
}הערכים של הטענות iat, exp ו-jti יהיו שונים.
יצירת JWT בחתימה עם אלגוריתם RS256
מדיניות לדוגמה שיוצרת JWT חדש וחותמת עליו באמצעות האלגוריתם RS256. יצירת חתימת RS256 מסתמכת על מפתח פרטי RSA, שצריך לספק בפורמט מקודד PEM. בדוגמה המלאה שבסרטון שלמעלה מוסבר איך לשלוח בקשה בנוגע למדיניות.
כשהפעולה הזו של המדיניות מופעלת, Edge מקודד את ה-JWT וחותם עליו דיגיטלית, כולל הטענות. מידע על החלקים של JWT ועל אופן ההצפנה והחתימה שלהם זמין ב-RFC7519.
<GenerateJWT name="JWT-Generate-RS256"> <Algorithm>RS256</Algorithm> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <PrivateKey> <Value ref="private.privatekey"/> <Password ref="private.privatekey-password"/> <Id ref="private.privatekey-id"/> </PrivateKey> <Subject>apigee-seattle-hatrack-montage</Subject> <Issuer>urn://apigee-edge-JWT-policy-test</Issuer> <Audience>urn://c60511c0-12a2-473c-80fd-42528eb65a6a</Audience> <ExpiresIn>60m</ExpiresIn> <Id/> <AdditionalClaims> <Claim name="show">And now for something completely different.</Claim> </AdditionalClaims> <OutputVariable>jwt-variable</OutputVariable> </GenerateJWT>
הגדרת הרכיבים המרכזיים
הרכיבים שבהם משתמשים כדי לציין את המפתח שמשמש ליצירת ה-JWT תלויים באלגוריתם שנבחר, כפי שמוצג בטבלה הבאה:
| אלגוריתם | אלמנטים מרכזיים | |
|---|---|---|
| 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 JWT
ההפניה למדיניות מתארת את האלמנטים והמאפיינים של מדיניות Generate JWT.
הערה: ההגדרה תשתנה במידה מסוימת בהתאם לאלגוריתם ההצפנה שבו אתם משתמשים. בקטע דוגמאות מופיעות דוגמאות שממחישות הגדרות לתרחישי שימוש ספציפיים.
מאפיינים שחלים על הרכיב ברמה העליונה
<GenerateJWT name="JWT" continueOnError="false" enabled="true" async="false">
המאפיינים הבאים משותפים לכל רכיבי ההורה של המדיניות.
| מאפיין | תיאור | ברירת מחדל | נוכחות |
|---|---|---|---|
| שם |
השם הפנימי של המדיניות. התווים שאפשר להשתמש בהם בשם מוגבלים ל:
A-Z0-9._\-$ %. עם זאת, בממשק המשתמש של Edge Management נאכפות הגבלות נוספות, כמו הסרה אוטומטית של תווים שהם לא אלפאנומריים.
אופציונלית, אפשר להשתמש ברכיב |
לא רלוונטי | חובה |
| continueOnError |
מגדירים את הערך false כדי להחזיר שגיאה אם המדיניות נכשלת. זו התנהגות צפויה ברוב המדיניות.
הגדרה ל- |
false | אופציונלי |
| פעיל |
כדי לאכוף את המדיניות, צריך להגדיר את הערך true.
מגדירים את הערך |
true | אופציונלי |
| אסינכרוני | המאפיין הזה הוצא משימוש. | false | הוצא משימוש |
<DisplayName>
<DisplayName>Policy Display Name</DisplayName>
אפשר להשתמש בו בנוסף למאפיין השם כדי לתת למדיניות תווית בשם אחר בשפה טבעית בכלי לעריכת פרוקסי בממשק הניהול.
| ברירת מחדל | אם לא מציינים את הרכיב הזה, המערכת משתמשת בערך של מאפיין השם של המדיניות. |
| נוכחות | אופציונלי |
| סוג | מחרוזת |
<Algorithm>
<Algorithm>algorithm-here</Algorithm>
מציין את אלגוריתם ההצפנה לחתימה על הטוקן.
| ברירת מחדל | לא רלוונטי |
| נוכחות | חובה |
| סוג | מחרוזת |
| ערכים תקינים | HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512 |
<Audience>
<Audience>audience-here</Audience> or: <Audience ref='variable_containing_audience'/>
המדיניות יוצרת JWT שמכיל הצהרה aud שהערך שלה מוגדר לערך שצוין. ההצהרה הזו מזהה את הנמענים שה-JWT מיועד להם. זוהי אחת מהטענות הרשומות שמוזכרות ב-RFC7519.
| ברירת מחדל | לא רלוונטי |
| נוכחות | אופציונלי |
| סוג | מערך (רשימה של ערכים מופרדים בפסיקים) |
| ערכים תקינים | כל דבר שמזהה את הקהל. |
<AdditionalClaims/Claim>
<AdditionalClaims> <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'/> </AdditionalClaims> or: <AdditionalClaims ref='claim_payload'/>
מאפשר לציין צמדי שם/ערך נוספים של טענות במטען הייעודי(payload) של ה-JWT. אפשר לציין את הטענה באופן מפורש כמחרוזת, כמספר, כערך בוליאני, כמפה או כמערך. מפה היא פשוט קבוצה של צמדים של שם/ערך.
| ברירת מחדל | לא רלוונטי |
| נוכחות | אופציונלי |
| ערכים תקינים | כל ערך שרוצים להשתמש בו לטענה נוספת. אפשר לציין את הטענה באופן מפורש כמחרוזת, כמספר, כערך בוליאני, כמפה או כמערך. |
רכיב <Claim> מקבל את המאפיינים הבאים:
- name – (חובה) שם התלונה.
- ref – (אופציונלי) השם של משתנה זרימה. אם המדיניות קיימת, היא תשתמש בערך של המשתנה הזה כמאפיין. אם מציינים גם מאפיין ref וגם ערך הצהרה מפורש, ערך ברירת המחדל הוא הערך המפורש, והמערכת משתמשת בו אם משתנה הזרימה שאליו מתבצעת ההפניה לא נפתר.
- type – (אופציונלי) אחד מהערכים הבאים: string (ברירת מחדל), number, boolean או map
- array – (אופציונלי) מגדירים את הערך true כדי לציין אם הערך הוא מערך של סוגים. ברירת מחדל: false.
כשכוללים את הרכיב <Claim>, שמות הטענות מוגדרים באופן סטטי כשמגדירים את המדיניות. אפשרות נוספת היא להעביר אובייקט JSON כדי לציין את שמות הטענות.
מכיוון שאובייקט ה-JSON מועבר כמשתנה, שמות הטענות ב-JWT שנוצר נקבעים בזמן הריצה.
לדוגמה:
<AdditionalClaims ref='json_claims'/>
כאשר המשתנה json_claims מכיל אובייקט JSON בפורמט:
{ "sub" : "person@example.com", "iss" : "urn://secure-issuer@example.com", "non-registered-claim" : { "This-is-a-thing" : 817, "https://example.com/foobar" : { "p": 42, "q": false } } }
ה-JWT שנוצר כולל את כל ההצהרות באובייקט ה-JSON.
<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>
הפונקציה מוסיפה את צמדי השם/ערך הנוספים של הטענה לכותרת של ה-JWT.
| ברירת מחדל | לא רלוונטי |
| נוכחות | אופציונלי |
| ערכים תקינים | כל ערך שרוצים להשתמש בו לטענה נוספת. אפשר לציין את הטענה באופן מפורש כמחרוזת, כמספר, כערך בוליאני, כמפה או כמערך. |
רכיב <Claim> מקבל את המאפיינים הבאים:
- name – (חובה) שם התלונה.
- ref – (אופציונלי) השם של משתנה זרימה. אם המדיניות קיימת, היא תשתמש בערך של המשתנה הזה כמאפיין. אם מציינים גם מאפיין ref וגם ערך הצהרה מפורש, ערך ברירת המחדל הוא הערך המפורש, והמערכת משתמשת בו אם משתנה הזרימה שאליו מתבצעת ההפניה לא נפתר.
- type – (אופציונלי) אחד מהערכים הבאים: string (ברירת מחדל), number, boolean או map
- array – (אופציונלי) מגדירים את הערך true כדי לציין אם הערך הוא מערך של סוגים. ברירת מחדל: false.
<CriticalHeaders>
<CriticalHeaders>a,b,c</CriticalHeaders> or: <CriticalHeaders ref=’variable_containing_headers’/>
הוספת הכותרת הקריטית, crit, לכותרת ה-JWT. הכותרת crit היא מערך של שמות כותרות שצריכים להיות מוכרים ומזוהים על ידי מקבל ה-JWT. לדוגמה:
{
“typ: “...”,
“alg” : “...”,
“crit” : [ “a”, “b”, “c” ],
}בזמן הריצה, המדיניות VerifyJWT בודקת את הכותרת crit.
לכל פריט שמופיע בכותרת crit, המערכת בודקת שגם הרכיב <KnownHeaders> של מדיניות VerifyJWT מפרט את הכותרת הזו. אם המדיניות VerifyJWT מוצאת בכותרת crit שדה שלא מופיע גם ב-<KnownHeaders>, המדיניות VerifyJWT תיכשל.
| ברירת מחדל | לא רלוונטי |
| נוכחות | אופציונלי |
| סוג | מערך של מחרוזות שמופרדות בפסיקים |
| ערכים תקינים | מערך או שם של משתנה שמכיל את המערך. |
<CustomClaims>
הערה: בשלב הזה, כשמוסיפים מדיניות GenerateJWT חדשה דרך ממשק המשתמש, מוכנס רכיב CustomClaims. האלמנט הזה לא פונקציונלי והמערכת מתעלמת ממנו. במקום זאת, צריך להשתמש ברכיב הנכון <AdditionalClaims>. ממשק המשתמש יעודכן בהמשך כדי להוסיף את הרכיבים הנכונים.
<ExpiresIn>
<ExpiresIn>time-value-here</ExpiresIn>
מציינים את משך החיים של ה-JWT באלפיות השנייה, בשניות, בדקות, בשעות או בימים.
| ברירת מחדל | N/A |
| נוכחות | אופציונלי |
| סוג | מספר שלם |
| ערכים תקינים |
ערך או הפניה למשתנה של זרימת נתונים שמכיל את הערך. אפשר לציין את יחידות הזמן באופן הבא:
לדוגמה, |
<Id>
<Id>explicit-jti-value-here</Id> -or- <Id ref='variable-name-here'/> -or- <Id/>
יוצר JWT עם טענת ה-jti הספציפית. אם ערך הטקסט ומאפיין ההפניה ריקים, המדיניות תיצור jti שמכיל UUID אקראי. המאפיין של מזהה ה-JWT (jti) הוא מזהה ייחודי של ה-JWT. מידע נוסף על jti זמין ב-RFC7519.
| ברירת מחדל | לא רלוונטי |
| נוכחות | אופציונלי |
| סוג | מחרוזת או הפניה. |
| ערכים תקינים | מחרוזת או שם של משתנה זרימה שמכיל את המזהה. |
<IgnoreUnresolvedVariables>
<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
מגדירים את הערך כ-False אם רוצים שהמדיניות תציג שגיאה כשמשתנה כלשהו שמוגדר בה לא ניתן לפתרון. הגדרה ל-true תגרום להתייחסות לכל משתנה שלא ניתן לפתור כמחרוזת ריקה (null).
| ברירת מחדל | לא נכון |
| נוכחות | אופציונלי |
| סוג | בוליאני |
| ערכים תקינים | true or false |
<Issuer>
<Issuer ref='variable-name-here'/> <Issuer>issuer-string-here</Issuer>
המדיניות יוצרת JWT שמכיל הצהרה עם השם iss,עם ערך שמוגדר לערך שצוין. טענה שמזהה את המנפיק של ה-JWT. זו אחת מהטענות הרשומות שמוזכרות ב-RFC7519.
| ברירת מחדל | לא רלוונטי |
| נוכחות | אופציונלי |
| סוג | מחרוזת או הפניה |
| ערכים תקינים | הכול |
<NotBefore>
<!-- Specify an absolute time. --> <NotBefore>2017-08-14T11:00:21-07:00</NotBefore> -or- <!-- Specify a time relative to when the token is generated. --> <NotBefore>6h</NotBefore>
מציינת את השעה שבה הטוקן הופך לתקף. הטוקן לא תקף עד לזמן שצוין. אפשר לציין ערך זמן אבסולוטי או זמן יחסי למועד שבו נוצר האסימון.
| ברירת מחדל | לא רלוונטי |
| נוכחות | אופציונלי |
| סוג | מחרוזת |
| ערכים תקינים | מידע על סימון אירועים כהמרות מפורט בהמשך. |
ערכי זמן תקינים לרכיב NotBefore עבור ערכי זמן מוחלטים
| שם | פורמט | דוגמה |
| ניתן למיון | yyyy-MM-dd'T'HH:mm:ss.SSSZ |
2017-08-14T11:00:21.269-0700 |
| RFC 1123 | EEE, dd MMM yyyy HH:mm:ss zzz |
Mon, 14 Aug 2017 11:00:21 PDT |
| RFC 850 | EEEE, dd-MMM-yy HH:mm:ss zzz |
Monday, 14-Aug-17 11:00:21 PDT |
| ANCI-C | EEE MMM d HH:mm:ss yyyy |
Mon Aug 14 11:00:21 2017 |
לערכי זמן יחסיים, מציינים מספר שלם ותקופת זמן, לדוגמה:
- 10 שניות
- 60 מ'
- 12 שעות
<OutputVariable>
<OutputVariable>jwt-variable</OutputVariable>
מציינת איפה למקם את אסימון ה-JWT שנוצר על ידי המדיניות הזו. כברירת מחדל, הוא ממוקם במשתנה זרימה jwt.POLICYNAME.generated_jwt.
| ברירת מחדל | jwt.POLICYNAME.generated_jwt |
| נוכחות | אופציונלי |
| סוג | מחרוזת (שם של משתנה זרימה) |
<PrivateKey/Id>
<PrivateKey> <Id ref="flow-variable-name-here"/> </PrivateKey> or <PrivateKey> <Id>your-id-value-here</Id> </PrivateKey>
מציין את מזהה המפתח (kid) שייכלל בכותרת ה-JWT. משתמשים רק ב- כשהאלגוריתם הוא אחד מהבאים: 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 שמשמש לחתימה על ה-JWT. משתמשים במאפיין ref כדי להעביר את המפתח במשתנה של זרימת העבודה. השימוש מותר רק אם האלגוריתם הוא אחד מהבאים: RS256/RS384/RS512, PS256/PS384/PS512 או ES256/ES384/ES512.
| ברירת מחדל | לא רלוונטי |
| נוכחות | חובה כדי ליצור JWT באמצעות אלגוריתם RS256. |
| סוג | מחרוזת |
| ערכים תקינים |
משתנה של זרימת נתונים שמכיל מחרוזת שמייצגת ערך של מפתח פרטי מסוג RSA שעבר קידוד PEM.
הערה: למשתנה זרימה צריך להיות הקידומת 'private'. לדוגמה,
|
<SecretKey/Id>
<SecretKey> <Id ref="flow-variable-name-here"/> </SecretKey> or <SecretKey> <Id>your-id-value-here</Id> </SecretKey>
מציין את מזהה המפתח (kid) שייכלל בכותרת ה-JWT של JWT שנחתם באמצעות אלגוריתם 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. לדוגמה, |
<Subject>
<Subject>subject-string-here</Subject>
<Subject ref="flow_variable" />
לדוגמה:
<Subject ref="apigee.developer.email"/>
המדיניות יוצרת JWT שמכיל הצהרה מסוג sub, שמוגדרת לערך שצוין.ההצהרה הזו מזהה את הנושא של ה-JWT או מצהירה עליו. זו אחת מהטענות הסטנדרטיות שמוזכרות ב-RFC7519.
| ברירת מחדל | לא רלוונטי |
| נוכחות | אופציונלי |
| סוג | מחרוזת |
| ערכים תקינים | כל ערך שמזהה באופן ייחודי נושא או משתנה של זרימת נתונים שמפנה לערך. |
משתני זרימה
המדיניות Generate JWT לא מגדירה משתני זרימה.
הפניה לשגיאה
בקטע הזה מתוארים קודי התקלות והודעות השגיאה שמוחזרים, ומשתני השגיאה שמוגדרים על ידי Edge כשהמדיניות הזו גורמת לשגיאה. חשוב לדעת אם אתם מפתחים כללים לתיקון תקלות. מידע נוסף זמין במאמר מה צריך לדעת על שגיאות מדיניות ועל טיפול בפגמים.
שגיאות בזמן ריצה
השגיאות האלה יכולות להתרחש כשהמדיניות מופעלת.
| קוד שגיאה | סטטוס HTTP | מופיע כאשר |
|---|---|---|
steps.jwt.AlgorithmInTokenNotPresentInConfiguration |
401 | מופיע כשמדיניות האימות כוללת כמה אלגוריתמים. |
steps.jwt.AlgorithmMismatch |
401 | האלגוריתם שצוין במדיניות היצירה לא תאם לאלגוריתם המצופה במדיניות האימות. האלגוריתמים שצוינו צריכים להתאים. |
steps.jwt.FailedToDecode |
401 | המדיניות לא הצליחה לפענח את ה-JWT. ייתכן שה-JWT פגום. |
steps.jwt.GenerationFailed |
401 | המדיניות לא הצליחה ליצור את ה-JWT. |
steps.jwt.InsufficientKeyLength |
401 | למפתח עם פחות מ-32 בייטים לאלגוריתם HS256, פחות מ-48 בייטים לאגוריתמי HS386 ופחות מ-64 בייטים לאלגוריתם HS512. |
steps.jwt.InvalidClaim |
401 | כאשר חסרה תלונה על הפרת זכויות יוצרים או תלונה על הפרת זכויות יוצרים, או חוסר התאמה בכותרת או בכותרת חסרה. |
steps.jwt.InvalidCurve |
401 | העקומה שצוינה על ידי המפתח אינה חוקית עבור האלגוריתם 'עקומה אליפטית'. |
steps.jwt.InvalidJsonFormat |
401 | נמצא JSON לא חוקי בכותרת או במטען הייעודי (payload). |
steps.jwt.InvalidToken |
401 | השגיאה הזו מתרחשת כאשר אימות החתימה של JWT נכשל. |
steps.jwt.JwtAudienceMismatch |
401 | תביעת הבעלות על הקהל נכשלה באימות האסימון. |
steps.jwt.JwtIssuerMismatch |
401 | תביעת המנפיק נכשלה בתהליך אימות האסימון. |
steps.jwt.JwtSubjectMismatch |
401 | תביעת הבעלות על הנושא נכשלה באימות האסימון. |
steps.jwt.KeyIdMissing |
401 | במדיניות האימות נעשה שימוש ב-JWKS כמקור למפתחות ציבוריים, אבל ה-JWT החתום
לא כולל נכס kid בכותרת. |
steps.jwt.KeyParsingFailed |
401 | לא ניתן היה לנתח את המפתח הציבורי מפרטי המפתח שצוינו. |
steps.jwt.NoAlgorithmFoundInHeader |
401 | מופיע כשה-JWT לא מכיל כותרת אלגוריתם. |
steps.jwt.NoMatchingPublicKey |
401 | במדיניות האימות נעשה שימוש ב-JWKS כמקור למפתחות ציבוריים, אבל kid
ב-JWT החתום לא רשום ב-JWKS. |
steps.jwt.SigningFailed |
401 | ב-GenerateJWT, למפתח שגודלו קטן מהגודל המינימלי לאלגוריתמים HS384 או HS512 |
steps.jwt.TokenExpired |
401 | המדיניות מנסה לאמת אסימון שפג תוקפו. |
steps.jwt.TokenNotYetValid |
401 | האסימון עדיין לא תקף. |
steps.jwt.UnhandledCriticalHeader |
401 | כותרת שנמצאה במדיניות 'אימות JWT' בכותרת crit לא
רשומה ב-KnownHeaders. |
steps.jwt.UnknownException |
401 | אירעה חריגה לא ידועה. |
steps.jwt.WrongKeyType |
401 | צוין סוג שגוי של מפתח. לדוגמה, אם ציינת מפתח RSA לאלגוריתם Elliptic Curve, או מפתח עקומה לאלגוריתם RSA. |
שגיאות בפריסה
השגיאות האלה יכולות להתרחש כשפורסים שרת proxy שכולל את המדיניות הזו.
| שם השגיאה | סיבה | תיקון |
|---|---|---|
InvalidNameForAdditionalClaim |
הפריסה תיכשל אם ההצהרה שנעשה בה שימוש ברכיב הצאצא <Claim>
של הרכיב <AdditionalClaims> היא אחד מהשמות הרשומים הבאים:
kid, iss, sub, aud, iat,
exp, nbf או jti.
|
build |
InvalidTypeForAdditionalClaim |
אם ההצהרה שנעשה בה שימוש ברכיב הצאצא <Claim>
של הרכיב <AdditionalClaims> אינה מסוג string, number, boolean או map, הפריסה תיכשל.
|
build |
MissingNameForAdditionalClaim |
אם שם ההצהרה לא צוין ברכיב הצאצא <Claim>
של הרכיב <AdditionalClaims>, הפריסה תיכשל.
|
build |
InvalidNameForAdditionalHeader |
השגיאה הזו נשלחת כאשר שם הצהרת זכויות היוצרים ברכיב הצאצא <Claim>
של הרכיב <AdditionalClaims> הוא alg או typ.
|
build |
InvalidTypeForAdditionalHeader |
אם סוג התביעה שבו נעשה שימוש ברכיב הצאצא <Claim>
של הרכיב <AdditionalClaims> אינו מסוג string, number, boolean או map, הפריסה תיכשל.
|
build |
InvalidValueOfArrayAttribute |
השגיאה הזו מתרחשת כאשר הערך של מאפיין המערך ברכיב הצאצא <Claim>
של הרכיב <AdditionalClaims> לא מוגדר ל-true או ל-false.
|
build |
InvalidConfigurationForActionAndAlgorithm |
אם נעשה שימוש ברכיב <PrivateKey> עם אלגוריתמים של Family HS או אם נעשה שימוש באלמנט <SecretKey> עם אלגוריתמים של משפחת RSA, הפריסה תיכשל.
|
build |
InvalidValueForElement |
אם הערך שצוין ברכיב <Algorithm> אינו ערך נתמך, הפריסה תיכשל.
|
build |
MissingConfigurationElement |
השגיאה הזו תופיע אם לא משתמשים ברכיב <PrivateKey> בשילוב עם אלגוריתמים ממשפחת RSA, או אם לא משתמשים ברכיב <SecretKey> באלגוריתמים של משפחת HS.
|
build |
InvalidKeyConfiguration |
אם רכיב הצאצא <Value> לא מוגדר ברכיבים <PrivateKey> או <SecretKey>, הפריסה תיכשל.
|
build |
EmptyElementForKeyConfiguration |
אם מאפיין ה-ref של אלמנט הצאצא <Value> מתוך הרכיבים <PrivateKey>
או <SecretKey> ריק או שלא צוין, הפריסה תיכשל.
|
build |
InvalidVariableNameForSecret |
השגיאה הזו מתרחשת אם השם של משתנה הזרימה שצוין במאפיין ה-ref של אלמנט הצאצא <Value> של האלמנטים <PrivateKey>
או <SecretKey> לא מכיל את הקידומת הפרטית (private.).
|
build |
InvalidSecretInConfig |
השגיאה הזו מתרחשת אם אלמנט הצאצא <Value> של רכיבי <PrivateKey> או <SecretKey> לא מכיל את הקידומת הפרטית (private.).
|
build |
InvalidTimeFormat |
אם הערך שצוין ברכיב <NotBefore> אינו בפורמט נתמך, הפריסה תיכשל.
|
build |
משתני כשל
המשתנים האלה מוגדרים כשמתרחשת שגיאה בסביבת זמן הריצה. מידע נוסף זמין במאמר מה צריך לדעת? על שגיאות שקשורות למדיניות.
| משתנים | איפה | דוגמה |
|---|---|---|
fault.name="fault_name" |
fault_name הוא שם השגיאה, כפי שמצוין בטבלה שגיאות זמן ריצה שלמעלה. שם השגיאה הוא החלק האחרון בקוד השגיאה. | fault.name Matches "TokenExpired" |
JWT.failed |
כל כללי המדיניות של JWT מגדירים את אותו משתנה במקרה של כשל. | JWT.failed = true |
דוגמה לתגובת שגיאה
לטיפול בשגיאות, השיטה המומלצת היא להעתיק את החלק errorcode של השגיאה
תשובה. אין להסתמך על הטקסט שבfaultstring, כי הוא עשוי להשתנות.
דוגמה לכלל שגוי
<FaultRules>
<FaultRule name="JWT Policy Errors">
<Step>
<Name>JavaScript-1</Name>
<Condition>(fault.name Matches "TokenExpired")</Condition>
</Step>
<Condition>JWT.failed=true</Condition>
</FaultRule>
</FaultRules>