המדיניות של CREATEJWT

מוצג המסמך של 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> הם אופציונליים.

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

מסמך עזר לרכיב ליצירת JWT

בחומר העזר בנושא המדיניות מתוארים הרכיבים והמאפיינים של המדיניות Generate JWT.

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

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

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

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

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

אפשר להשתמש ברכיב <displayname></displayname> כדי להוסיף תווית למדיניות בעורך ה-Proxy של ממשק המשתמש לניהול בשפה טבעית אחרת שם.

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

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

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

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

true אופציונלי
אסינכרוני המאפיין הזה הוצא משימוש. false הוצא משימוש

&lt;DisplayName&gt;

<DisplayName>Policy Display Name</DisplayName>

שימוש בנוסף למאפיין השם כדי להוסיף תווית למדיניות בעורך ה-Proxy של ממשק המשתמש לניהול בשם אחר בשפה טבעית.

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

&lt;Algorithm&gt;

<Algorithm>algorithm-here</Algorithm>

מציינת את אלגוריתם ההצפנה לצורך חתימה על האסימון.

ברירת מחדל לא רלוונטי
נוכחות חובה
סוג מחרוזת
ערכים חוקיים HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512

&lt;Audience&gt;

<Audience>audience-here</Audience>

or:

<Audience ref='variable_containing_audience'/>

המדיניות יוצרת JWT שכולל הצהרת aud שמוגדרת לערך שצוין עם ערך מסוים. ההצהרה הזו מציינת את הנמענים שאליהם ה-JWT מיועד. זהו אחד מ- תלונות רשומות שמוזכרות ב-RFC7519.

ברירת מחדל לא רלוונטי
נוכחות אופציונלי
סוג מערך (רשימה של ערכים מופרדים בפסיקים)
ערכים חוקיים כל פרט שמזהה את הקהל.

&lt;AdditionalClaims/Claim&gt;

<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 – (אופציונלי) אחת מהאפשרויות: מחרוזת (ברירת מחדל), מספר, ערך בוליאני או מפה
  • מערך – (אופציונלי) מגדירים את הערך true כדי לציין אם הערך הוא מערך של סוגים. ברירת מחדל: לא נכון.

כשכוללים את הרכיב <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.

&lt;AdditionalHeaders/Claim&gt;

<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 – (אופציונלי) אחת מהאפשרויות: מחרוזת (ברירת מחדל), מספר, ערך בוליאני או מפה
  • מערך – (אופציונלי) מגדירים את הערך true כדי לציין אם הערך הוא מערך של סוגים. ברירת מחדל: לא נכון.

&lt;CriticalHeaders&gt;

<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 להיכשל.

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

&lt;CustomClaims&gt;

הערה: בשלב הזה, הרכיב CustomClaims מתווסף כשמוסיפים רכיב חדש יצירת מדיניות JWT דרך ממשק המשתמש. הרכיב הזה לא פעיל והמערכת מתעלמת ממנו. השם הנכון במקום זאת, הוא &lt;AdditionalClaims&gt;. בממשק המשתמש צריך לעדכן את הממשק כדי להוסיף את הרכיבים הנכונים מאוחר יותר.

&lt;ExpiresIn&gt;

<ExpiresIn>time-value-here</ExpiresIn>

מציינת את משך החיים של ה-JWT באלפיות שנייה, שניות, דקות, שעות או ימים.

ברירת מחדל N/A
נוכחות אופציונלי
סוג מספר שלם
ערכים חוקיים

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

  • ms = אלפיות שנייה (ברירת מחדל)
  • s = שניות
  • m = דקות
  • שע' = שעות
  • d = ימים

לדוגמה, ExpiresIn=10d שווה ערך ל-ExpiresIn 864,000s.

&lt;Id&gt;

<Id>explicit-jti-value-here</Id>
 -or-
<Id ref='variable-name-here'/>
 -or-
<Id/>

יוצרת JWT עם הצהרת ה-jti הספציפית. כשערך הטקסט ומאפיין ה-ref הם שניהם ריק, המדיניות תיצור jti שמכיל מזהה ייחודי אקראי. הצהרת מזהה ה-JWT (jti) היא מזהה ייחודי של ה-JWT. מידע נוסף על jti זמין בכתובת RFC7519.

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

&lt;IgnoreUnresolvedVariables&gt;

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

יש להגדיר את הערך כ-False אם רוצים שהמדיניות תגרור שגיאה כשמצוין משתנה כלשהו שאליו יש הפניה במדיניות לא ניתן לפתור. יש להגדיר את הערך כ-True כדי להתייחס לכל משתנה שלא ניתן לפתרון כמחרוזת ריקה (null).

ברירת מחדל לא נכון
נוכחות אופציונלי
סוג בוליאני
ערכים חוקיים נכון או לא נכון

&lt;Issuer&gt;

<Issuer ref='variable-name-here'/>
<Issuer>issuer-string-here</Issuer>

המדיניות יוצרת JWT שמכיל הצהרה בשם iss,עם ערך מוגדר לערך שצוין. הצהרה שמזהה את המנפיק של ה-JWT. זהו אחד מ- קבוצת ההצהרות הרשומה שהוזכרה ב-RFC7519.

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

&lt;NotBefore&gt;

<!-- 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 יום שני, 14 באוגוסט 2017 11:00:21 לפי שעון החוף המערבי
RFC 850 EEEE, dd-MMM-yy HH:mm:ss zzz יום שני, 14-17 באוגוסט 11:00:21 לפי שעון החוף המערבי
ANCI-C EEE MMM d HH:mm:ss yyyy יום שני, 14 באוגוסט 11:00:21 2017

בערכי זמן יחסיים, מציינים מספר שלם ותקופת זמן. לדוגמה:

  • 10 שנ'
  • 60 דקות
  • 12 שע'

&lt;OutputVariable&gt;

<OutputVariable>jwt-variable</OutputVariable>

מציינת איפה למקם את ה-JWT שנוצר באמצעות המדיניות הזו. כברירת מחדל הוא ממוקם משתנה הזרימה jwt.POLICYNAME.generated_jwt.

ברירת מחדל jwt.POLICYNAME.generated_jwt
נוכחות אופציונלי
סוג מחרוזת (שם של משתנה זרימה)

&lt;PrivateKey/Id&gt;

<PrivateKey>
  <Id ref="flow-variable-name-here"/>
</PrivateKey>

or

<PrivateKey>
  <Id>your-id-value-here</Id>
</PrivateKey>

מציינת את מזהה המפתח (ילד) שצריך לכלול בכותרת ה-JWT. שימוש בלבד כשהאלגוריתם הוא RS256/RS384/RS512, PS256/PS384/PS512, או ES256/ES384/ES512.

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

&lt;PrivateKey/Password&gt;

<PrivateKey>
  <Password ref="private.privatekey-password"/>
</PrivateKey>

מציינים את הסיסמה שתשמש את המדיניות לפענוח המפתח הפרטי, במקרה הצורך. משתמשים ב ref כדי להעביר את המפתח במשתנה זרימה. שימוש בלבד כשהאלגוריתם הוא RS256/RS384/RS512, PS256/PS384/PS512, או ES256/ES384/ES512.

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

הערה: חובה לציין משתנה זרימה. אפליקציית Edge תידחה כלא תקינה של המדיניות שבה הסיסמה מצוינת בטקסט ללא הצפנה. משתנה הזרימה חייב לכלול את התחילית "private". לדוגמה, private.mypassword.

&lt;PrivateKey/Value&gt;

<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

&lt;SecretKey/Id&gt;

<SecretKey>
  <Id ref="flow-variable-name-here"/>
</SecretKey>

or

<SecretKey>
  <Id>your-id-value-here</Id>
</SecretKey>

מציינת את מזהה המפתח (ילד) שייכלל בכותרת ה-JWT של JWT שנחתם באמצעות HMAC באלגוריתם כלשהו. יש להשתמש באפשרות הזו רק כאשר האלגוריתם הוא אחד מהפרמטרים הבאים: HS256/HS384/HS512.

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

&lt;SecretKey/Value&gt;

<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

&lt;Subject&gt;

<Subject>subject-string-here</Subject>
או
<Subject ref="flow_variable" />

לדוגמה:

<Subject ref="apigee.developer.email"/>

המדיניות יוצרת JWT שמכיל הצהרת Sub, שמוגדרת לערך שצוין value.ההצהרה הזו מזהה את הנושא של ה-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>