‫GenerateJWT policy

אתם צופים במסמכי התיעוד של 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>

הרכיבים <Password> ו-<Id> הם אופציונליים.

*מידע נוסף על דרישות המפתח מופיע במאמר מידע על אלגוריתמים להצפנת חתימות.

הפניה לרכיב Generate JWT

ההפניה למדיניות מתארת את האלמנטים והמאפיינים של מדיניות Generate JWT.

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

מאפיינים שחלים על הרכיב ברמה העליונה

<GenerateJWT name="JWT" continueOnError="false" enabled="true" async="false">

המאפיינים הבאים משותפים לכל רכיבי ההורה של המדיניות.

מאפיין תיאור ברירת מחדל נוכחות
שם השם הפנימי של המדיניות. התווים שאפשר להשתמש בהם בשם מוגבלים ל: A-Z0-9._\-$ %. עם זאת, בממשק המשתמש של Edge Management נאכפות הגבלות נוספות, כמו הסרה אוטומטית של תווים שהם לא אלפאנומריים.

אופציונלית, אפשר להשתמש ברכיב <displayname></displayname> כדי לתת למדיניות שם אחר בשפה טבעית, ולתייג אותה בכלי לעריכת ה-proxy של ממשק ניהול.

לא רלוונטי חובה
continueOnError מגדירים את הערך false כדי להחזיר שגיאה אם המדיניות נכשלת. זו התנהגות צפויה ברוב המדיניות.

הגדרה ל-true מאפשרת להמשיך את הביצוע של התהליך גם אחרי שמדיניות נכשלת.

false אופציונלי
פעיל כדי לאכוף את המדיניות, צריך להגדיר את הערך true.

מגדירים את הערך false כדי להשבית את המדיניות. המדיניות לא תיאכף גם אם היא תישאר מצורפת לזרימה.

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
נוכחות אופציונלי
סוג מספר שלם
ערכים תקינים

ערך או הפניה למשתנה של זרימת נתונים שמכיל את הערך. אפשר לציין את יחידות הזמן באופן הבא:

  • ‫ms = אלפיות שנייה (ברירת מחדל)
  • s = שניות
  • m = minutes
  • h = hours
  • d = days

לדוגמה, ExpiresIn=10d שווה ל-ExpiresIn של 864,000 שניות.

<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. לדוגמה, private.mypassword.

<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'. לדוגמה, private.mykey

<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. לדוגמה, private.mysecret

<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.
InvalidTypeForAdditionalClaim אם ההצהרה שנעשה בה שימוש ברכיב הצאצא <Claim> של הרכיב <AdditionalClaims> אינה מסוג string, number, boolean או map, הפריסה תיכשל.
MissingNameForAdditionalClaim אם שם ההצהרה לא צוין ברכיב הצאצא <Claim> של הרכיב <AdditionalClaims>, הפריסה תיכשל.
InvalidNameForAdditionalHeader השגיאה הזו נשלחת כאשר שם הצהרת זכויות היוצרים ברכיב הצאצא <Claim> של הרכיב <AdditionalClaims> הוא alg או typ.
InvalidTypeForAdditionalHeader אם סוג התביעה שבו נעשה שימוש ברכיב הצאצא <Claim> של הרכיב <AdditionalClaims> אינו מסוג string, number, boolean או map, הפריסה תיכשל.
InvalidValueOfArrayAttribute השגיאה הזו מתרחשת כאשר הערך של מאפיין המערך ברכיב הצאצא <Claim> של הרכיב <AdditionalClaims> לא מוגדר ל-true או ל-false.
InvalidConfigurationForActionAndAlgorithm אם נעשה שימוש ברכיב <PrivateKey> עם אלגוריתמים של Family HS או אם נעשה שימוש באלמנט <SecretKey> עם אלגוריתמים של משפחת RSA, הפריסה תיכשל.
InvalidValueForElement אם הערך שצוין ברכיב <Algorithm> אינו ערך נתמך, הפריסה תיכשל.
MissingConfigurationElement השגיאה הזו תופיע אם לא משתמשים ברכיב <PrivateKey> בשילוב עם אלגוריתמים ממשפחת RSA, או אם לא משתמשים ברכיב <SecretKey> באלגוריתמים של משפחת HS.
InvalidKeyConfiguration אם רכיב הצאצא <Value> לא מוגדר ברכיבים <PrivateKey> או <SecretKey>, הפריסה תיכשל.
EmptyElementForKeyConfiguration אם מאפיין ה-ref של אלמנט הצאצא <Value> מתוך הרכיבים <PrivateKey> או <SecretKey> ריק או שלא צוין, הפריסה תיכשל.
InvalidVariableNameForSecret השגיאה הזו מתרחשת אם השם של משתנה הזרימה שצוין במאפיין ה-ref של אלמנט הצאצא <Value> של האלמנטים <PrivateKey> או <SecretKey> לא מכיל את הקידומת הפרטית (private.).
InvalidSecretInConfig השגיאה הזו מתרחשת אם אלמנט הצאצא <Value> של רכיבי <PrivateKey> או <SecretKey> לא מכיל את הקידומת הפרטית (private.).
InvalidTimeFormat אם הערך שצוין ברכיב <NotBefore> אינו בפורמט נתמך, הפריסה תיכשל.

משתני כשל

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

משתנים איפה דוגמה
fault.name="fault_name" fault_name הוא שם השגיאה, כפי שמצוין בטבלה שגיאות זמן ריצה שלמעלה. שם השגיאה הוא החלק האחרון בקוד השגיאה. fault.name Matches "TokenExpired"
JWT.failed כל כללי המדיניות של JWT מגדירים את אותו משתנה במקרה של כשל. JWT.failed = true

דוגמה לתגובת שגיאה

קודי תקלות במדיניות JWT

לטיפול בשגיאות, השיטה המומלצת היא להעתיק את החלק 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>