מדיניות OAuthV2

מוצג המסמך של Apigee Edge.
עוברים אל מסמכי תיעוד של Apigee X.
מידע

מה

OAuthV2 היא מדיניות מרובת מאפיינים לביצוע פעולות מסוג הענקת OAuth 2.0. כאן המדיניות הראשית שמשמשת להגדרת נקודות קצה מסוג OAuth 2.0 ב-Apigee Edge.

טיפ: מידע נוסף על OAuth ב-Apigee Edge זמין במאמר דף הבית של OAuth. הוא מספק קישורים ועד למשאבים, דוגמאות, סרטונים ועוד. מידע נוסף על אפשרויות מתקדמות דוגמת OAuth ב-GitHub כדי להדגים איך משתמשים במדיניות הזו תרגום מכונה.

טעימות

VerifyAccessToken

VerifyAccessToken

התצורה הזו של מדיניות OAuthV2 (עם הפעולה VerifyAccessToken) מאמתת ש אסימון הגישה שנשלח ל-Apigee Edge תקין. כשפעולת המדיניות הזו מופעלת, Edge מחפש אסימון גישה חוקי בבקשה. אם אסימון הגישה חוקי, הבקשה מורשה להמשיך. אם הערך לא תקין, כל העיבוד יופסק ותוחזר שגיאה תשובה.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-2">
    <DisplayName>OAuth v2.0 2</DisplayName>
    <Operation>VerifyAccessToken</Operation>
    <AccessTokenPrefix>Bearer</AccessTokenPrefix> <!-- Optional, default is Bearer -->
</OAuthV2>

הערה: יש תמיכה רק באסימוני OAuth 2.0. אימות הודעות אין תמיכה באסימוני קוד (MAC).

לדוגמה:

$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282

כברירת מחדל, Edge מקבל אסימוני גישה בכותרת Authorization עם את הקידומת Bearer. אפשר לשנות את ברירת המחדל הזו באמצעות <AccessToken> לרכיב מסוים.

GenerateAccessToken

המערכת יוצרת אסימוני גישה

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

GenerateAuthorizationCode

יצירת קוד הרשאה

לדוגמאות שמראות איך לבקש קודי הרשאה, ראו בקשת קודי הרשאה קוד הרשאה.

RefreshAccessToken

רענון של אסימון גישה

לדוגמאות שמראות איך לבקש אסימוני גישה באמצעות אסימון רענון, ראו רענון של אסימון גישה.

אסימון לזרימת התשובה

יצירת אסימון גישה בתהליך התגובה

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

קודם כול, נבחן את המדיניות לדוגמה:

<OAuthV2 enabled="true" continueOnError="false" async="false" name="generateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <AppEndUser>Doe</AppEndUser>
    <UserName>jdoe</UserName>
    <PassWord>jdoe</PassWord>
    <GrantType>grant_type</GrantType>
    <ClientId>a_valid_client_id</ClientId>
    <SupportedGrantTypes>
        <GrantType>password</GrantType>
    </SupportedGrantTypes>
</OAuthV2>

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

הכותרת Authorization חייבת להכיל ערכת גישה בסיסית עם קידוד Base64 client_id:client_secret.

אפשר להוסיף את הכותרת הזו באמצעות מדיניות JavaScript שמופיעה ממש לפני מדיניות OAuthV2, ככה. הערך "local_clientid" ו-"local_secret" חייבים להיות מוגדרים קודם לכן בתהליך:

var client_id = context.getVariable("local_clientid");
var client_secret = context.getVariable("local_secret");
context.setVariable("request.header.Authorization","Basic "+CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1
                                      .parse(client_id + ':' + client_secret)));

למידע נוסף, אפשר לעיין במאמר "קידוד בסיסי אימות פרטי כניסה.

הפניה לרכיבים

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

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

<OAuthV2 name="GenerateAccessToken">
  <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type -->
  <Operation>GenerateAccessToken</Operation>
  <!-- This is in millseconds, so expire in an hour -->
  <ExpiresIn>3600000</ExpiresIn>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GrantType>request.queryparam.grant_type</GrantType>
  <GenerateResponse/>
</OAuthV2>

<OAuthV2> מאפיינים

<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">

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

מאפיין תיאור ברירת מחדל נוכחות
name

השם הפנימי של המדיניות. הערך של המאפיין name יכול לכלול אותיות, מספרים, רווחים, מקפים, קווים תחתונים ונקודות. הערך הזה לא יכול ארוך מ-255 תווים.

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

לא רלוונטי חובה
continueOnError

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

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

false אופציונלי
enabled

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

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

true אופציונלי
async

המאפיין הזה הוצא משימוש.

false הוצא משימוש

&lt;DisplayName&gt; רכיב

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

<DisplayName>Policy Display Name</DisplayName>
ברירת מחדל

לא רלוונטי

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

נוכחות אופציונלי
סוג מחרוזת

&lt;AccessToken&gt; רכיב

<AccessToken>request.header.access_token</AccessToken>

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

דוגמה שבה <AccessToken>request.header.access_token</AccessToken> שצוין:

curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"
דוגמה שבה הערך <AccessToken>request.queryparam.access_token</AccessToken> שצוין:

curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"

ברירת המחדל:

לא רלוונטי

נוכחות:

אופציונלי

סוג: מחרוזת
בשימוש עם פעולות:
  • VerifyAccessToken

&lt;AccessTokenPrefix&gt; רכיב

<AccessTokenPrefix>Bearer</AccessTokenPrefix>

כברירת מחדל, VerifyAccessToken מצפה שאסימון הגישה יישלח בכותרת Authorization כאסימון למוכ"ז. לדוגמה:

-H "Authorization: Bearer Rft3dqrs56Blirls56a"

בשלב זה, נושאת היא התחילית הנתמכת היחידה.

ברירת המחדל:

פרמטרים לרשת

נוכחות:

אופציונלי

סוג: מחרוזת
ערכים חוקיים:

פרמטרים לרשת

בשימוש עם פעולות:
  • VerifyAccessToken

&lt;AppEndUser&gt; רכיב

<AppEndUser>request.queryparam.app_enduser</AppEndUser>

במקרים שבהם צריך לשלוח את המזהה של משתמש הקצה של האפליקציה לשרת ההרשאות, הרכיב הזה מאפשר לפי המיקום שבו Edge צריך לחפש את המזהה של משתמש הקצה. לדוגמה, הוא יכול להישלח כשאילתה או בכותרת HTTP.

לדוגמה, request.queryparam.app_enduser מציין AppEndUser צריך להופיע כפרמטר של שאילתה, כמו לדוגמה, ?app_enduser=ntesla@theramin.com. כדי לחייב את משתמש ה-AppEndUser ב-HTTP 'כותרת', למשל, להגדיר את הערך הזה ל-request.header.app_enduser.

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

ברירת המחדל:

לא רלוונטי

נוכחות:

אופציונלי

סוג: מחרוזת
ערכים חוקיים:

כל משתנה זרימה שנגיש למדיניות בזמן הריצה.

בשימוש עם סוגי מענקים:
  • authorization_code
  • מרומז
  • סיסמה
  • client_credentials

&lt;Attributes/Attribute&gt;

<Attributes>
    <Attribute name="attr_name1" ref="flow.variable" display="true|false">value1</Attribute>
    <Attribute name="attr_name2" ref="flow.variable" display="true|false">value2</Attribute>
</Attributes>

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

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

למידע נוסף על השימוש ברכיב הזה, ראו התאמה אישית של אסימונים קודי הרשאות.

הצגה או הסתרה של מאפיינים מותאמים אישית במסגרת תשובה

חשוב לזכור שאם מגדירים את רכיב GenerateResponse של המדיניות הזו כ-true, ייצוג ה-JSON המלא של האסימון מוחזר בתגובה, כולל למאפיינים שאתם מגדירים. במקרים מסוימים, ייתכן שתרצו להסתיר חלק מהנתונים בהתאמה אישית או את כולם מאפיינים בתגובה כך שלא יהיו גלויים לאפליקציות לקוח.

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

<Attributes>
    <Attribute name="employee_id" ref="employee.id" display="false"/>
    <Attribute name="employee_name" ref="employee.name" display="false"/>
</Attributes>

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

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

כדי להסתיר את ההתאמה האישית במקרים כאלה, תוכלו לבחור מבין האפשרויות הבאות:

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

ראה גם התאמה אישית של אסימונים ו קודי הרשאות.

ברירת המחדל:

N/A

נוכחות:

אופציונלי

ערכים חוקיים:
  • name - שם המאפיין
  • ref – ערך המאפיין. יכול להגיע ממשתנה זרימה.
  • display – (אופציונלי) מאפשר לציין אם מאפיינים מותאמים אישית יופיעו בתשובה. אם הערך שלו הוא true, יופיעו בתשובה מאפיינים מותאמים אישית (אם גם GenerateResponse מופעל). אם false, בהתאמה אישית מאפיינים לא נכללים בתשובה. ערך ברירת המחדל הוא true. אפשר לעיין בקטע הצגה או הסתרה של מאפיינים מותאמים אישית תשובה.
בשימוש עם סוגי מענקים:
  • authorization_code
  • מרומז
  • סיסמה
  • client_credentials
  • refresh_token
  • אפשר להשתמש בו גם עם הפעולה GenerateAuthorizationCode.

&lt;ClientId&gt; רכיב

<ClientId>request.formparam.client_id</ClientId>

במקרים מסוימים, אפליקציית הלקוח חייבת לשלוח את מספר הלקוח לשרת ההרשאות. הזה מאפשר לציין את המיקום שבו Edge צריך לחפש את מזהה הלקוח. הערכים התקפים היחידים המיקום שאפשר להגדיר הוא ברירת המחדל המיקום, משתנה הזרימה request.formparam.client_id. מתבצעת הגדרה של ClientId לכל משתנה אחר שלא נתמך. כדאי לעיין גם במאמר בקשת אסימוני גישה והרשאה קודים.

ברירת המחדל:

request.formparam.client_id (כתובת x-www-form-url מקודדת ומצוינת בבקשה גוף ההודעה)

נוכחות:

אופציונלי

סוג: מחרוזת
ערכים חוקיים: משתנה הזרימה: request.formparam.client_id
בשימוש עם סוגי מענקים:
  • authorization_code
  • סיסמה
  • מרומז
  • client_credentials

אפשר להשתמש בו גם עם הפעולה GenerateAuthorizationCode.

&lt;Code&gt; רכיב

<Code>request.queryparam.code</Code>

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

המשתנה request.queryparam.auth_code מציין את קוד ההרשאה יש לציין כפרמטר של שאילתה, כמו במקרה לדוגמה, ?auth_code=AfGlvs9. לדרוש את קוד ההרשאה ב-HTTP 'כותרת', למשל, להגדיר את הערך הזה ל-request.header.auth_code. עוד באותו הקשר בקשת אסימוני גישה ו קודי הרשאה.

ברירת המחדל:

request.formparam.code (a x-www-form-urlencoded ומצוין בגוף הבקשה)

נוכחות:

אופציונלי

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

&lt;ExpiresIn&gt; רכיב

<ExpiresIn>10000</ExpiresIn> 

אוכפת את מועד התפוגה של אסימוני גישה וקודי הרשאות באלפיות שנייה. (עבור אסימוני רענון, יש להשתמש ב-<RefreshTokenExpiresIn>.) ערך זמן התפוגה הוא שנוצר על ידי המערכת, בתוספת הערך <ExpiresIn>. אם המיקום הערך של <ExpiresIn> מוגדר לערך -1, תוקף האסימון או הקוד פג בהתאם לתפוגת התוקף המקסימלית של אסימון גישה ל-OAuth. אם אין הגדרה של <ExpiresIn>, המערכת תחיל ערך ברירת המחדל שהוגדר ברמת המערכת.

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

באמצעות Apigee Edge for Public Cloud, דפדפן Edge שומר הישויות הבאות נשמרו במטמון למשך 180 שניות לפחות לאחר הגישה לישויות.

  • אסימוני גישה מסוג OAuth. המשמעות היא שאסימון שבוטל עדיין יכול להצליח עבור עד שלושה דקות, עד שמגבלת המטמון שלו תפוג.
  • ישויות של שירות ניהול מפתחות (KMS) (אפליקציות, מפתחים, מוצרי API).
  • מאפיינים מותאמים אישית באסימוני OAuth ובישויות KMS.

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

<ExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</ExpiresIn>

Edge לא תומך בדרך לאלץ את תפוגת התוקף של אסימון לאחר שהוא נוצר. אם אתם צריכים לאלץ את תפוגת התוקף של אסימון (לדוגמה, על סמך תנאי מסוים), פתרון אפשרי הוא מתואר ב את הפוסט הזה לקהילה ב-Apigee

כברירת מחדל, אסימוני גישה שתוקפם פג נמחקים מ-Apigee באופן סופי מערכת Edge אוטומטית 3 ימים אחרי התפוגה. אפשר לקרוא גם מידע מהיר על גישה מהירה אסימונים

ענן פרטי: ב-Edge להתקנת ענן פרטי, ברירת המחדל היא מוגדר על ידי המאפיין conf_keymanagement_oauth_auth_code_expiry_time_in_millis. כדי להגדיר את הנכס הזה:

  1. פותחים את הקובץ message-processor.properties בעורך. אם הקובץ לא קיים, יוצרים אותו:
    vi /opt/apigee/customer/application/message-processor.properties
  2. מגדירים את הנכס הרצוי:
    conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
  3. צריך לוודא שקובץ המאפיינים נמצא בבעלות ה-apigee user:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. צריך להפעיל מחדש את מעבד ההודעות.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

ברירת המחדל:

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

נוכחות:

אופציונלי

סוג: מספר שלם
ערכים חוקיים:
בשימוש עם סוגי מענקים:
  • authorization_code
  • מרומז
  • סיסמה
  • client_credentials
  • refresh_token

משמש גם עם הפעולה GenerateAuthorizationCode.

&lt;ExternalAccessToken&gt; רכיב

<ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken>

מציין ל-Apigee Edge איפה למצוא אסימון גישה חיצוני (אסימון גישה שלא נוצר על ידי Apigee Edge).

המשתנה request.queryparam.external_access_token מציין אסימון הגישה החיצוני צריך להופיע כפרמטר של שאילתה, כמו לדוגמה, ?external_access_token=12345678. כדי לדרוש אסימון גישה חיצוני בכותרת HTTP. לדוגמה, מגדירים את הערך הזה אל request.header.external_access_token. למידע נוסף, ראו שימוש ב-OAuth של צד שלישי אסימונים.

&lt;ExternalAuthorization&gt; רכיב

<ExternalAuthorization>true</ExternalAuthorization>

אם הרכיב הזה מוגדר כ-False או לא קיים, Edge יאמת את ערכי client_id ו-client_secret בדרך כלל מול מאגר ההרשאות של Apigee Edge. השתמשו ברכיב הזה כשאתם רוצים לעבוד עם אסימוני OAuth של צד שלישי. לפרטים על השימוש ברכיב הזה, כדאי לעיין במאמר שימוש ב-OAuth של צד שלישי אסימונים.

ברירת המחדל:

false

נוכחות:

אופציונלי

סוג: ערך בוליאני
ערכים חוקיים: נכון או לא נכון
בשימוש עם סוגי מענקים:
  • authorization_code
  • סיסמה
  • client_credentials

&lt;ExternalAuthorizationCode&gt; רכיב

<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>

מציין ל-Apigee Edge איפה למצוא קוד אימות חיצוני (קוד הרשאה שלא נוצר על ידי Apigee Edge).

המשתנה request.queryparam.external_auth_code מציין קוד ההרשאה החיצוני צריך להופיע כפרמטר של שאילתה, כי, לדוגמה, ?external_auth_code=12345678. כדי לדרוש אימות חיצוני קוד בכותרת HTTP. לדוגמה, מגדירים את הערך הזה אל request.header.external_auth_code. למידע נוסף, ראו שימוש ב-OAuth של צד שלישי אסימונים.

&lt;ExternalRefreshToken&gt; רכיב

<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>

מציין ל-Apigee Edge איפה למצוא אסימון רענון חיצוני (אסימון רענון שלא נוצר על ידי Apigee Edge).

המשתנה request.queryparam.external_refresh_token מציין אסימון הרענון החיצוני צריך להופיע כפרמטר של שאילתה, כמו לדוגמה, ?external_refresh_token=12345678. כדי לדרוש אסימון הרענון החיצוני בכותרת HTTP. לדוגמה, מגדירים את הערך הזה אל request.header.external_refresh_token. למידע נוסף, ראו שימוש ב-OAuth של צד שלישי אסימונים.

&lt;GenerateResponse&gt; רכיב

<GenerateResponse enabled='true'/>

אם המדיניות מוגדרת לערך true, המדיניות יוצרת ומחזירה תשובה. לדוגמה, GenerateAccessToken, התגובה עשויה להיות:

{
  "issued_at" : "1467841035013",
  "scope" : "read",
  "application_name" : "e31b8d06-d538-4f6b-9fe3-8796c11dc930",
  "refresh_token_issued_at" : "1467841035013",
  "status" : "approved",
  "refresh_token_status" : "approved",
  "api_product_list" : "[Product1, nhl_product]",
  "expires_in" : "1799",
  "developer.email" : "edward@slalom.org",
  "token_type" : "BearerToken",
  "refresh_token" : "rVSmm3QaNa0xBVFbUISz1NZI15akvgLJ",
  "client_id" : "Adfsdvoc7KX5Gezz9le745UEql5dDmj",
  "access_token" : "AnoHsh2oZ6EFWF4h0KrA0gC5og3a",
  "organization_name" : "cerruti",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

אם הערך שלו הוא false, לא תישלח תשובה. במקום זאת, קבוצה של משתני זרימה עם ערכים שקשורים לפונקציה של המדיניות. לדוגמה, משתנה זרימה שנקרא oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code מאוכלס הונפקה קוד הרשאה. שימו לב שהביטוי expires_in מתבטא בשניות תשובה.

ברירת המחדל:

false

נוכחות:

אופציונלי

סוג: מחרוזת
ערכים חוקיים: נכון או לא נכון
בשימוש עם סוגי מענקים:
  • מרומז
  • סיסמה
  • client_credentials
  • refresh_token
  • אפשר להשתמש בו גם עם הפעולה GenerateAuthorizationCode.

&lt;GenerateErrorResponse&gt; רכיב

<GenerateErrorResponse enabled='true'/>

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

ברירת המחדל:

false

נוכחות:

אופציונלי

סוג: מחרוזת
ערכים חוקיים: נכון או לא נכון
בשימוש עם סוגי מענקים:
  • מרומז
  • סיסמה
  • client_credentials
  • refresh_token
  • אפשר להשתמש בו גם עם הפעולה GenerateAuthorizationCode.

&lt;GrantType&gt;

<GrantType>request.queryparam.grant_type</GrantType>

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

לדוגמה request.queryparam.grant_type מציין שהסיסמה צריך להכיל פרמטר של שאילתה, כמו, לדוגמה, ?grant_type=password. כדי לחייב את סוג המענק בכותרת HTTP, למשל, צריך להגדיר את הערך הזה אל request.header.grant_type. כדאי לעיין גם במאמר בקשת אסימוני גישה והרשאה קודים.

ברירת המחדל:

request.formparam.grant_type (קובץ x-www-form-urlencoded ומצוין בבקשה גוף ההודעה)

נוכחות:

אופציונלי

סוג: מחרוזת
ערכים חוקיים: משתנה, כפי שהוסבר למעלה.
בשימוש עם סוגי מענקים:
  • authorization_code
  • סיסמה
  • מרומז
  • client_credentials
  • refresh_token

&lt;Operation&gt; רכיב

<Operation>GenerateAuthorizationCode</Operation>

פעולת OAuth 2.0 בוצעה על ידי המדיניות.

ברירת המחדל:

אם לא צוין <Operation>, Edge בודק את הרשימה <SupportedGrantTypes>. רק הפעולות על סוגי ההענקה האלה יחולו הפעולה הצליחה. במילים אחרות, אפשר להשמיט את <Operation> אם מציינים <GrantType> ברשימה <SupportedGrantTypes>. אם המיקום גם <Operation> וגם לא <SupportedGrantTypes> שמצוין, סוג ברירת המחדל של ההענקה הוא authorization_code. כלומר, authorization_code בקשות מסוג מענק יצליחו, אך כל שאר הבקשות ייכשלו.

נוכחות:

אופציונלי

סוג: מחרוזת
ערכים חוקיים:

&lt;PassWord&gt; רכיב

<PassWord>request.queryparam.password</PassWord>

השימוש ברכיב הזה מתבצע באמצעות סוג הקצאת הסיסמה בלבד. ב- סוג הענקת הסיסמה, פרטי הכניסה של המשתמש (סיסמה ושם משתמש) יהיו זמינים מדיניות OAuthV2. הרכיבים <PassWord> ו-<UserName> הם שמשמש לציון משתנים שבהם Edge יכול למצוא את הערכים האלה. אם הרכיבים האלה לא צוינו, המדיניות מצפה למצוא את הערכים (כברירת מחדל) בפרמטרים של טופס שנקרא username ו-password. אם הערכים לא נמצאו, המדיניות תקפיץ הודעת שגיאה. אפשר להשתמש את הרכיבים <PassWord> ו-<UserName> כדי להפנות משתנה זרימה, המכיל את פרטי הכניסה.

לדוגמה, תוכלו להעביר את הסיסמה בבקשת אסימון באמצעות פרמטר של שאילתה, ולהגדיר רכיב כזה: <PassWord>request.queryparam.password</PassWord>. אל נדרשת סיסמה בכותרת HTTP, יש להגדיר את הערך הזה אל request.header.password.

מדיניות OAuthV2 לא משפיעה על ערכי פרטי הכניסה האלה. Edge פשוט כדי לאמת את נוכחותם. מפתח ה-API הוא זה שיאחזר את בקשת הערכים שולחים אותם לספק זהויות לפני שמדיניות יצירת האסימון מופעלת.

כדאי לעיין גם במאמר בקשת אסימוני גישה וקודי הרשאה.

ברירת המחדל:

request.formparam.password (ax-www-form-urlencoded ומצוין בבקשה גוף ההודעה)

נוכחות:

אופציונלי

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

&lt;RedirectUri&gt; רכיב

<RedirectUri>request.queryparam.redirect_uri</RedirectUri>

מציינת איפה דפדפן Edge צריך לחפש את הפרמטר redirect_uri בקשה.

מידע על מזהי URI של הפניה אוטומטית

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

  • (חובה) אם כתובת URL לקריאה חוזרת (callback) רשומה באפליקציה למפתחים שמשויכת אל מפתחות הלקוח של הבקשה, ואם redirect_uri מופיע בבקשה, שניהם חייבים להיות זהים. אם הם לא תואמים, תוחזר שגיאה. למידע מידע על רישום אפליקציות למפתחים ב-Edge וציון כתובת URL לקריאה חוזרת. מידע נוסף זמין בקטע רישום אפליקציות וניהול API .

  • (אופציונלי) אם רשומה כתובת URL לקריאה חוזרת (callback), והשדה redirect_uri חסר מהבקשה, Edge יפנה אוטומטית לכתובת ה-URL הרשומה לקריאה חוזרת (callback).
  • (חובה) אם לא רשומה כתובת URL לקריאה חוזרת, הערך של redirect_uri הוא נדרש. שימו לב שבמקרה הזה, Edge יקבל כל כתובת URL. במקרה הזה יכול להיות בעיית אבטחה, ולכן יש להשתמש בו רק עם לקוח מהימן של האפליקציות. אם אפליקציות הלקוח לא מהימנות, השיטה המומלצת היא תמיד לדרוש רישום של כתובת URL לקריאה חוזרת (callback).

תוכלו לשלוח את הפרמטר הזה בפרמטר של שאילתה או בכותרת. המשתנה request.queryparam.redirect_uri מציין שה-RedirectUri צריך להיות נוכח כפרמטר של שאילתה, כמו לדוגמה, ?redirect_uri=login.myapp.com. לדרוש הפניה מחדש ב-HTTP 'כותרת', למשל, להגדיר את הערך הזה ל-request.header.redirect_uri. צפייה גם בקשת אסימוני גישה קודי הרשאה.

ברירת המחדל:

request.formparam.redirect_uri (קובץ x-www-form-urlencoded ומצוין בבקשה גוף ההודעה)

נוכחות:

אופציונלי

סוג: מחרוזת
ערכים חוקיים: כל משתנה זרימה שניתן לגשת אליו במדיניות בזמן הריצה
בשימוש עם סוגי מענקים:
  • authorization_code
  • מרומז

משמש גם עם הפעולה GenerateAuthorizationCode.

&lt;RefreshToken&gt; רכיב

<RefreshToken>request.queryparam.refreshtoken</RefreshToken>

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

המשתנה request.queryparam.refreshtoken מציין שהרענון את האסימון צריך להופיע כפרמטר של שאילתה, כמו לדוגמה, ?refresh_token=login.myapp.com. לחייב את אסימון הרענון ב-HTTP 'כותרת', למשל, להגדיר את הערך הזה ל-request.header.refresh_token. צפייה גם בקשת אסימוני גישה קודי הרשאה.

ברירת המחדל:

request.formparam.refresh_token (קובץ x-www-form-urlencoded ומצוין בבקשה גוף ההודעה)

נוכחות:

אופציונלי

סוג: מחרוזת
ערכים חוקיים: כל משתנה זרימה שניתן לגשת אליו במדיניות בזמן הריצה
בשימוש עם סוגי מענקים:
  • refresh_token

&lt;RefreshTokenExpiresIn&gt; רכיב

<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>

אכיפת מועד התפוגה של אסימוני רענון באלפיות שנייה. ערך מועד התפוגה הוא מערכת שנוצר, בתוספת הערך <RefreshTokenExpiresIn>. אם המיקום <RefreshTokenExpiresIn> מוגדר להיות -1, אסימון הרענון יפוג בהתאם לתאריך התפוגה המקסימלי של אסימון רענון של OAuth. אם לא צוין <RefreshTokenExpiresIn>, המערכת מחילה ערך ברירת מחדל שהוגדר ברמת המערכת. למידע נוסף, אפשר לפנות לתמיכה של Apigee Edge מידע על הגדרות ברירת המחדל של המערכת.

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

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

<RefreshTokenExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</RefreshTokenExpiresIn>

ענן פרטי: ב-Edge להתקנת ענן פרטי, ברירת המחדל היא מוגדר על ידי המאפיין conf_keymanagement_oauth_refresh_token_expiry_time_in_millis. כדי להגדיר את הנכס הזה:

  1. פותחים את הקובץ message-processor.properties בעורך. אם הקובץ לא קיים, יוצרים אותו:
    vi /opt/apigee/customer/application/message-processor.properties
  2. מגדירים את הנכס הרצוי:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
  3. צריך לוודא שקובץ המאפיינים נמצא בבעלות ה-apigee user:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. צריך להפעיל מחדש את מעבד ההודעות.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

ברירת המחדל:

63072000000 אלפיות השנייה (שנתיים) (החל מ-5 באוגוסט 2024)

נוכחות:

אופציונלי

סוג: מספר שלם
ערכים חוקיים:
בשימוש עם סוגי מענקים:
  • authorization_code
  • סיסמה
  • refresh_token

&lt;ResponseType&gt; רכיב

<ResponseType>request.queryparam.response_type</ResponseType>

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

כברירת מחדל, Edge מחפש את הערך של סוג התגובה בשאילתה response_type הפרמטר. אם ברצונך לשנות את התנהגות ברירת המחדל הזו, אפשר להשתמש בפקודה <ResponseType> רכיב ל- להגדיר משתנה זרימה שמכיל את הערך של סוג התגובה. לדוגמה, אם מגדירים את הקוד הזה אל request.header.response_type, Edge מחפש את סוג התגובה מועבר בכותרת הבקשה. כדאי לעיין גם במאמר בקשת אסימוני גישה והרשאה קודים.

ברירת המחדל:

request.formparam.response_type (קוד x-www-form-urlencoded ומצוין בבקשה גוף ההודעה)

נוכחות:

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

סוג: מחרוזת
ערכים חוקיים: code (לסוג הענקת קוד ההרשאה) או token (לסוג ההענקה המשתמעת)
בשימוש עם סוגי מענקים:
  • מרומז
  • משמש גם עם הפעולה GenerateAuthorizationCode.

&lt;ReuseRefreshToken&gt; רכיב

<ReuseRefreshToken>true</ReuseRefreshToken>

אם המדיניות מוגדרת לערך true, נעשה שימוש חוזר באסימון הרענון הקיים עד שהתוקף שלו יפוג. אם המיקום false, אסימון רענון חדש מונפק על ידי Apigee Edge כשאסימון רענון חוקי של הסרטון.

ברירת המחדל:

false

נוכחות:

אופציונלי

סוג: בוליאני
ערכים חוקיים:

true או false

בשימוש עם סוג המענק:
  • refresh_token

&lt;Scope&gt; רכיב

<Scope>request.queryparam.scope</Scope>

אם הרכיב הזה מופיע באחד מהאסימון GenerateAccessToken או GenerateAuthorizationCode מדיניות, היא משמשת כדי לציין אילו היקפים להעניק את האסימון או את הקוד. הערכים האלה הם בדרך כלל מועברים למדיניות בבקשה מאפליקציית לקוח. אפשר להגדיר את הרכיב משתנה זרימה, כך שתהיה לכם אפשרות לבחור איך ההיקפים יועברו בבקשה. לחשבון הדוגמה הבאה, request.queryparam.scope מציינת שההיקף צריך מופיע בתור פרמטר של שאילתה, כמו, לדוגמה, ?scope=READ. כדי לדרוש בכותרת HTTP. לדוגמה, מגדירים את הערך הזה אל request.header.scope.

אם הרכיב הזה מופיע ב-"VerifyAccessToken" המדיניות הזו משמשת כדי לציין את היקפי ההרשאות שהמדיניות צריכה לאכוף. במדיניות מהסוג הזה, הערך חייב להיות 'בקידוד קשיח' היקף name – לא ניתן להשתמש במשתנים. לדוגמה:

<Scope>A B</Scope>

ראו גם עבודה עם OAuth2 היקפי הרשאות ובקשת אסימוני גישה וקודי הרשאה.

ברירת המחדל:

אין היקף הרשאות

נוכחות:

אופציונלי

סוג: מחרוזת
ערכים חוקיים:

אם משתמשים בו יחד עם מדיניות Generate*, משתנה זרימה.

אם נעשה בו שימוש עם VerifyAccessToken, רשימה של שמות היקפים (מחרוזות) שמופרדים באמצעות רווח.

בשימוש עם סוגי מענקים:
  • authorization_code
  • מרומז
  • סיסמה
  • client_credentials
  • אפשר להשתמש בו גם עם GenerateAuthorizationCode ו-VerifyAccessToken ב-AI.

&lt;State&gt; רכיב

<State>request.queryparam.state</State>

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

לדוגמה request.queryparam.state מציין שהמדינה צריכה להיות מופיע בתור פרמטר של שאילתה, כמו, לדוגמה, ?state=HjoiuKJH32. לדרוש את המצב בכותרת HTTP. לדוגמה, מגדירים את הערך אל request.header.state. כדאי לעיין גם במאמר בקשת אסימוני גישה והרשאות קודים.

ברירת המחדל:

אין מדינה

נוכחות:

אופציונלי

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

&lt;StoreToken&gt; רכיב

 <StoreToken>true</StoreToken> 

הגדרת הרכיב הזה כ-true כאשר <ExternalAuthorization> הרכיב הוא true. הרכיב <StoreToken> מורה ל-Apigee Edge אחסון של אסימון הגישה החיצוני. אחרת, היא לא תישאר בתוקף.

ברירת המחדל:

false

נוכחות:

אופציונלי

סוג: ערך בוליאני
ערכים חוקיים: נכון או לא נכון
בשימוש עם סוגי מענקים:
  • authorization_code
  • סיסמה
  • client_credentials

&lt;SupportedGrantTypes&gt;/&lt;GrantType&gt; רכיב

<SupportedGrantTypes>
    <GrantType>authorization_code</GrantType>
    <GrantType>client_credentials</GrantType>
    <GrantType>implicit</GrantType>
    <GrantType>password</GrantType>
</SupportedGrantTypes>

מציינת את סוגי ההרשאות שנתמכות על ידי נקודת קצה של אסימון OAuth ב-Apigee Edge. נקודת קצה עשויה לתמוך בכמה סוגי הרשאות (כלומר, אפשר להגדיר נקודת קצה אחת לחלוקת גישה) אסימונים עבור מספר סוגי הענקות.) מידע נוסף על נקודות קצה זמין במאמר הסבר על OAuth נקודות קצה (endpoints). סוג המענק מועבר בבקשות לאסימונים ב-grant_type הפרמטר.

אם לא מציינים סוגי הענקות נתמכים, סוגי ההענקה המותרים היחידים הם authorization_code וגם implicit ניתן לעיין גם ברכיב &lt;GrantType&gt; (שהוא רכיב ברמה גבוהה יותר שמשמש כדי לציין איפה ב-Apigee Edge צריך לחפש את הפרמטר grant_type שמועבר לבקשת לקוח. Edge יוודא שהערך של הפרמטר grant_type תואם לאחד מסוגי ההענקות הנתמכים).

ברירת המחדל:

הרשאה _קוד ומשתמע

נוכחות:

חובה

סוג: מחרוזת
ערכים חוקיים:
  • client_credentials
  • authorization_code
  • סיסמה
  • מרומז

&lt;Tokens&gt;/&lt;Token&gt; רכיב

משמש יחד עם הפעולות VerifyToken ו-ANRateToken. ראו גם אישור שלילת אסימוני גישה. האסימון <Token> מזהה את משתנה הזרימה שמגדיר מקור האסימון שצריך לבטל. אם המפתחים צפויים לשלוח אסימוני גישה כ- פרמטרים של שאילתה בשם access_token, לדוגמה, להשתמש ב-request.queryparam.access_token.

&lt;UserName&gt; רכיב

<UserName>request.queryparam.user_name</UserName>

השימוש ברכיב הזה מתבצע באמצעות סוג הקצאת הסיסמה בלבד. ב- סוג הענקת הסיסמה, פרטי הכניסה של המשתמש (סיסמה ושם משתמש) יהיו זמינים מדיניות OAuthV2. הרכיבים <PassWord> ו-<UserName> הם שמשמש לציון משתנים שבהם Edge יכול למצוא את הערכים האלה. אם הרכיבים האלה לא צוינו, המדיניות מצפה למצוא את הערכים (כברירת מחדל) בפרמטרים של טופס שנקרא username ו-password. אם הערכים לא נמצאו, המדיניות תקפיץ הודעת שגיאה. אפשר להשתמש את הרכיבים <PassWord> ו-<UserName> כדי להפנות משתנה זרימה, המכיל את פרטי הכניסה.

לדוגמה, תוכלו להעביר את שם המשתמש בפרמטר של שאילתה ולהגדיר את רכיב <UserName> כמו זה: <UserName>request.queryparam.username</UserName>.כדי לדרוש שם המשתמש בכותרת HTTP, מגדירים את הערך הזה אל request.header.username.

מדיניות OAuthV2 לא משפיעה על ערכי פרטי הכניסה האלה. Edge פשוט כדי לאמת את נוכחותם. מפתח ה-API הוא זה שיאחזר את בקשת הערכים שולחים אותם לספק זהויות לפני שמדיניות יצירת האסימון מופעלת.

כדאי לעיין גם במאמר בקשת אסימוני גישה וקודי הרשאה.

ברירת המחדל:

request.formparam.username (a x-www-form-urlencoded ומצוין בבקשה גוף ההודעה)

נוכחות:

אופציונלי

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

אימות הגישה אסימונים

לאחר הגדרת נקודת קצה של אסימון לשרת proxy ל-API, מדיניות OAuthV2 תואמת מציינת את הפעולה VerifyAccessToken מצורפת לתהליך שחושף את הוא משאב מוגן.

לדוגמה, כדי לוודא שכל הבקשות ל-API מורשות, המדיניות הבאה אוכפת אימות של אסימון גישה:

<OAuthV2 name="VerifyOAuthAccessToken">
  <Operation>VerifyAccessToken</Operation>
</OAuthV2>

המדיניות מצורפת למשאב ה-API שצריך להגן עליו. כדי להבטיח שכל הבקשות ה-API מאומת. צריך לצרף את המדיניות לבקשת PreFlow של ה-ProxyEndpoint, באופן הבא:

<PreFlow>
  <Request>
    <Step><Name>VerifyOAuthAccessToken</Name></Step>
  </Request>
</PreFlow>

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

שם תיאור
היקף

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

<OAuthV2 name="ValidateOauthScopePolicy">
  <Operation>VerifyAccessToken</Operation>
  <Scope>READ WRITE</Scope>
</OAuthV2>
AccessToken המשתנה שבו צפוי למקם את אסימון הגישה. לדוגמה request.queryparam.accesstoken כברירת מחדל, אסימון הגישה צפוי להיות מוצגת על ידי האפליקציה בכותרת Authorization HTTP, בהתאם למפרט OAuth 2.0. שימוש בטיוטה הזו הגדרה אם אסימון הגישה צפוי להופיע במיקום לא סטנדרטי, פרמטר של שאילתה או כותרת HTTP בשם שאינו Authorization.

מידע נוסף זמין בקטע אימות גישה אסימוני גישה ובקשת אסימוני גישה וקודי הרשאה.

ציון מיקומים של משתנים בבקשה

לגבי כל סוג הענקה, המדיניות מתבססת על הנחות לגבי המיקום או המידע הנדרש בהודעות של בקשות. ההנחות האלה מבוססות על מפרט OAuth 2.0. אם האפליקציות שלך צריכה לסטות מהמפרט של OAuth 2.0, אז ניתן לציין את המיקומים הצפויים עבור של כל פרמטר. לדוגמה, כאשר מטפלים בקוד הרשאה, תוכלו לציין את המיקום של קוד ההרשאה, מזהה הלקוח, ה-URI להפניה אוטומטית וההיקף. אפשר לציין אותן כך: כותרות HTTP, פרמטרים של שאילתה או פרמטרים של טופס.

הדוגמה הבאה ממחישה איך מציינים את המיקום של קוד ההרשאה הנדרש ככותרות HTTP:

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.header.client_id</ClientId>
  <RedirectUri>request.header.redirect_uri</RedirectUri>
  <Scope>request.header.scope</Scope>
  ...

לחלופין, במקרה הצורך כדי לתמוך בבסיס האפליקציות של הלקוח, אפשר לשלב בין כותרות ושאילתות :

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.queryparam.client_id</ClientId>
  <RedirectUri>request.queryparam.redirect_uri</RedirectUri>
  <Scope>request.queryparam.scope</Scope>
  ...

אפשר להגדיר מיקום אחד בלבד לכל פרמטר.

משתני זרימה

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

פעולת VerifyAccessToken

הפעולה VerifyAccessToken מופעלת, מאוכלסים במספר גדול של משתני זרימה בהקשר הביצוע של שרת ה-proxy. המשתנים האלה מספקים מאפיינים שקשורים להרשאת הגישה אסימון, אפליקציה למפתחים, מפתח וחברה. אפשר להשתמש במדיניות AssignMessage או JavaScript, לדוגמה, לקרוא כל אחד מהמשתנים האלה ולהשתמש בהם לפי הצורך בשלב מאוחר יותר בתהליך. האלה יכולים להיות שימושיים גם לניפוי באגים.

משתנים ספציפיים לאסימונים

משתנים תיאור
organization_name שם הארגון שבו שרת ה-proxy מופעל.
developer.id המזהה של המפתח שמשויך לאפליקציית הלקוח הרשומה.
developer.app.name שם המפתח שמשויך לאפליקציית הלקוח הרשומה.
client_id מזהה הלקוח של אפליקציית הלקוח הרשומה.
grant_type סוג ההרשאה שמשויך לבקשה.
token_type סוג האסימון שמשויך לבקשה.
access_token אסימון הגישה שנמצא בתהליך אימות.
accesstoken.{custom_attribute} מאפיין מותאם אישית בעל שם באסימון הגישה.
issued_at התאריך שבו הונפק אסימון הגישה, מבוטא ב-Unix זמן Epoch באלפיות השנייה.
expires_in זמן התפוגה של אסימון הגישה. ביטוי ב שניות. למרות שExpiresIn מגדיר את התפוגה באלפיות השנייה, בתגובת האסימון של משתני הזרימה, הערך מתבטא בשניות.
status הסטטוס של אסימון הגישה (למשל, אושר או בוטל).
scope ההיקף (אם יש) שמשויך לאסימון הגישה.
apiproduct.<custom_attribute_name> מאפיין מותאם אישית בעל שם של מוצר ה-API שמשויך ללקוח הרשום אפליקציה.
apiproduct.name השם של מוצר ה-API שמשויך לאפליקציית הלקוח הרשומה.
revoke_reason

(Apigee hybrid בלבד) מציין למה אסימון הגישה מבוטל.

הערך יכול להיות REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER, או TOKEN_REVOKED.

משתנים ספציפיים לאפליקציה

המשתנים האלה קשורים לאפליקציה למפתחים שמשויכת לאסימון.

משתנים תיאור
app.name
app.id
app.accessType
app.callbackUrl
app.status אושרה או בוטלה
app.scopes
app.appFamily
app.apiproducts
app.appParentStatus
app.appType לדוגמה: מפתח
app.appParentId
app.created_by
app.created_at
app.last_modified_at
app.last_modified_by
app.{custom_attributes} מאפיין מותאם אישית בעל שם של אפליקציית הלקוח הרשומה.

משתנים ספציפיים למפתחים

אם הערך של app.appType הוא "Company", מאפייני החברה יאוכלסו ואם הערך app.appType הוא השדה 'מפתח', ואז מאפייני המפתח מאוכלסים.

משתנים תיאור
משתנים ספציפיים למפתחים
developer.id
developer.userName
developer.firstName
developer.lastName
developer.email
developer.status פעיל או לא פעיל
developer.apps
developer.created_by
developer.created_at
developer.last_modified_at
developer.last_modified_by
developer.{custom_attributes} מאפיין מותאם אישית בעל שם של המפתח.

משתנים ספציפיים לחברה

אם הערך של app.appType הוא "Company", מאפייני החברה יאוכלסו ואם הערך app.appType הוא השדה 'מפתח', ואז מאפייני המפתח מאוכלסים.

משתנים תיאור
company.id
company.displayName
company.apps
company.appOwnerStatus
company.created_by
company.created_at
company.last_modified_at
company.last_modified_by
company.{custom_attributes} מאפיין מותאם אישית בעל שם של החברה.

GenerateAuthorizationCode פעולה

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

קידומת: oauthv2authcode.{policy_name}.{variable_name}

לדוגמה: oauthv2authcode.GenerateCodePolicy.code

משתנה תיאור
code קוד ההרשאה שנוצר כשהמדיניות מופעלת.
redirect_uri ה-URI להפניה אוטומטית שמשויך לאפליקציית הלקוח הרשומה.
scope היקף ההרשאות האופציונלי של OAuth שמועבר בבקשת הלקוח.
client_id מזהה הלקוח שהועבר בבקשת הלקוח.

GenerateAccessToken ו פעולות רענון

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

קידומת: oauthv2accesstoken.{policy_name}.{variable_name}

לדוגמה: oauthv2accesstoken.GenerateTokenPolicy.access_token

שם משתנה תיאור
access_token אסימון הגישה שנוצר.
client_id מספר הלקוח של אפליקציית הפיתוח שמשויכת לאסימון הזה.
expires_in ערך התפוגה של האסימון. ניתן לעיין ב&lt;ExpiresIn&gt; לפרטים נוספים. שימו לב שבתשובה, expires_in מצוין שניות.
scope רשימת היקפים זמינים שהוגדרו לאסימון. איך עובדים עם היקפי הרשאות OAuth2
status approved או revoked.
token_type מוגדר ל-BearerToken.
developer.email כתובת האימייל של המפתח הרשום שהוא הבעלים של אפליקציית הפיתוח המשויכת באמצעות האסימון.
organization_name הארגון שבו פועל שרת ה-proxy.
api_product_list רשימה של המוצרים שמשויכים לאפליקציה התואמת למפתחים של האסימון.
refresh_count
refresh_token אסימון הרענון שנוצר. לתשומת ליבכם: לא נוצרים אסימוני רענון עבור סוג ההרשאה של פרטי הכניסה של הלקוח.
refresh_token_expires_in משך החיים של אסימון הרענון, בשניות.
refresh_token_issued_at ערך הזמן הזה הוא הייצוג של המחרוזת של חותמת הזמן המתאימה של 32 ביט. quantity. לדוגמה, 'יום רביעי, 21 באוגוסט 2013 19:16:47 UTC' תואם לערך של חותמת הזמן של 1377112607413.
refresh_token_status approved או revoked.

GenerateAccessTokenImplicitGrant

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

קידומת: oauthv2accesstoken.{policy_name}.{variable_name}

לדוגמה: oauthv2accesstoken.RefreshTokenPolicy.access_token

משתנה תיאור
oauthv2accesstoken.access_token אסימון הגישה שנוצר כשהמדיניות מופעלת.
oauthv2accesstoken.{policy_name}.expires_in ערך התפוגה של האסימון, בשניות. לפרטים נוספים, אפשר לעיין ברכיב &lt;ExpiresIn&gt;.

המשמעות של שגיאות

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

שגיאות זמן ריצה

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

קוד תקלה סטטוס HTTP סיבה הופעל על ידי תפעול
steps.oauth.v2.access_token_expired 401 פג התוקף של אסימון הגישה.

VerifyAccessToken
InvalidateToken

steps.oauth.v2.access_token_not_approved 401 אסימון הגישה בוטל. VerifyAccessToken
steps.oauth.v2.apiresource_doesnot_exist 401 המשאב המבוקש אינו קיים באף אחד ממוצרי ה-API המשויכים אל אסימון גישה. VerifyAccessToken
steps.oauth.v2.FailedToResolveAccessToken 500 המדיניות שצפויה למצוא אסימון גישה במשתנה שצוין רכיב <AccessToken>, אבל אי אפשר לפענח את המשתנה. GenerateAccessToken
steps.oauth.v2.FailedToResolveAuthorizationCode 500 המדיניות שצפויה למצוא קוד הרשאה במשתנה שצוין רכיב <Code>, אבל אי אפשר לפענח את המשתנה. GenerateAuthorizationCode
steps.oauth.v2.FailedToResolveClientId 500 המדיניות שצפויה למצוא את ה-Client ID במשתנה שצוין רכיב <ClientId>, אבל אי אפשר לפענח את המשתנה. GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken
steps.oauth.v2.FailedToResolveRefreshToken 500 המדיניות צפויה למצוא אסימון רענון במשתנה שצוין רכיב <RefreshToken>, אבל אי אפשר לפענח את המשתנה. RefreshAccessToken
steps.oauth.v2.FailedToResolveToken 500 המדיניות שצפויה למצוא אסימון במשתנה שצוין רכיב <Tokens>, אבל אי אפשר לפענח את המשתנה.

ValidateToken
InvalidateToken

steps.oauth.v2.InsufficientScope 403 לאסימון הגישה שמוצג בבקשה יש היקף שלא תואם להיקף שמצוין במדיניות לאימות אסימון גישה. מידע נוסף על היקף זמין במאמר עבודה עם היקפי הרשאות OAuth2. VerifyAccessToken
steps.oauth.v2.invalid_access_token 401 אסימון הגישה שנשלח מהלקוח אינו חוקי. VerifyAccessToken
steps.oauth.v2.invalid_client 401

שם השגיאה הזה מוחזר כאשר המאפיין <GenerateResponse> של המדיניות מוגדרת כ-true ומזהה הלקוח שנשלח בבקשה הוא לא תקין. ודאו שאתם משתמשים בערכים הנכונים של מפתח הלקוח והסוד האפליקציה למפתחים שמשויכת לשרת ה-proxy שלך. בדרך כלל, הערכים האלה נשלחים כותרת Basic Authorization בקידוד Base64.

הערה: מומלץ לשנות את כלל השגיאה הקיים כדי לקחת את invalid_client InvalidClientIdentifier שמות. לעיון בגרסה 16.09.21 הערות למידע נוסף ודוגמה.

GenerateAccessToken
RefreshAccessToken
steps.oauth.v2.invalid_request 400 שם השגיאה הזה משמש לכמה סוגים שונים של שגיאות, בדרך כלל לשגיאות חסרות או פרמטרים שגויים שנשלחו בבקשה. אם <GenerateResponse> הוא מוגדר ל-false, השתמש במשתני שגיאה (מתוארים בהמשך) כדי לאחזר פרטים על השגיאה, למשל שם התקלה והסיבה לשגיאה. GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken
steps.oauth.v2.InvalidAccessToken 401 כותרת ההרשאה לא כוללת את המילה "נושא", והיא נדרשת. עבור דוגמה: Authorization: Bearer your_access_token VerifyAccessToken
steps.oauth.v2.InvalidAPICallAsNo\
steps.oauth.v2.ApiProductMatchFound
401

שרת ה-proxy של ה-API לא נמצא במוצר שמשויך לאסימון הגישה.

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

ראו בנוסף הנחיות נוספות לגבי הסיבות לשגיאה הזו זמינים בפוסט בקהילת Apigee.

VerifyAccessToken
steps.oauth.v2.InvalidClientIdentifier 500

שם השגיאה הזה מוחזר כאשר המאפיין <GenerateResponse> של המדיניות מוגדרת כ-false ומזהה הלקוח שנשלח בבקשה הוא לא תקין. ודאו שאתם משתמשים בערכים הנכונים של מפתח הלקוח והסוד אפליקציה למפתחים שמשויכת לשרת ה-proxy שלך. בדרך כלל, הערכים האלה נשלחים בפורמט Base64 לכותרת הבסיסית 'הרשאה בסיסית' המקודדת.

הערה: במצב הזה, בעבר קראו לשגיאה הזו invalid_client מומלץ לשנות את כלל השגיאה הקיים את התנאים כדי לתפוס גם את invalid_client וגם InvalidClientIdentifier שמות. לעיון בגרסה 16.09.21 הערות למידע נוסף ודוגמה.

GenerateAccessToken
RefreshAccessToken

steps.oauth.v2.InvalidParameter 500 המדיניות חייבת לציין אסימון גישה או קוד הרשאה, אבל לא ובשניהם. GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.InvalidTokenType 500 הרכיב <Tokens>/<Token> מחייב לציין את האסימון הסוג (לדוגמה, refreshtoken). אם הלקוח מעביר נתונים מהסוג הלא נכון, הפעולה הבאה נשלחת לשגיאה. ValidateToken
InvalidateToken
steps.oauth.v2.MissingParameter 500 סוג התגובה הוא token, אבל לא צוינו סוגי הקצאות. GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.UnSupportedGrantType 500

הלקוח ציין סוג הענקה שאינו נתמך על ידי המדיניות (לא מופיע ברשימה &lt;SupportedGrantTypes&gt; ).

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

GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken

שגיאות פריסה

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

שם השגיאה סיבה
InvalidValueForExpiresIn

לרכיב <ExpiresIn>, הערכים החוקיים הם מספרים שלמים חיוביים וגם -1.

InvalidValueForRefreshTokenExpiresIn לרכיב <RefreshTokenExpiresIn>, הערכים החוקיים הם חיוביים שלמים ו--1.
InvalidGrantType סוג מענק לא חוקי מצוין בקובץ <SupportedGrantTypes> לרכיב מסוים. רשימת הסוגים התקינה מופיעה בחומר העזר בנושא מדיניות.
ExpiresInNotApplicableForOperation חשוב לוודא שהפעולות שצוינו בקטע <Operations> תמיכה ברכיבים את תאריך התפוגה. לדוגמה, הפעולה VerifyToken לא עושה זאת.
RefreshTokenExpiresInNotApplicableForOperation חשוב לוודא שהפעולות שצוינו בקטע <Operations> רענון לתמיכה ברכיב את תאריך התפוגה של האסימון. לדוגמה, הפעולה VerifyToken לא עושה זאת.
GrantTypesNotApplicableForOperation ודא שסוגי ההענקות שצוינו ב-<SupportedGrantTypes>. נתמכים עבור בפעולה שצוינה.
OperationRequired

צריך לציין פעולה במדיניות הזו באמצעות <Operation> לרכיב מסוים.

הערה: אם הרכיב <Operation> חסר, ממשק המשתמש מקפיצה שגיאת אימות סכימה.

InvalidOperation

צריך לציין פעולה חוקית במדיניות הזו באמצעות רכיב <Operation>.

הערה: אם הרכיב <Operation> לא חוקי, ממשק המשתמש מקפיצה שגיאת אימות סכימה.

TokenValueRequired עליך לציין ערך של אסימון <Token> בשדה רכיב <Tokens>.

משתני כשל

המשתנים האלה מוגדרים כשהמדיניות הזו גורמת לשגיאה בזמן הריצה.

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

הערה: בפעולה VerifyAccessToken, שם השגיאה כולל את הסיומת הזו: keymanagement.service
לדוגמה: keymanagement.service.invalid_access_token

oauthV2.policy_name.fault.cause policy_name הוא השם שצוין על ידי המשתמש של המדיניות שגרמה לבעיה. oauthV2.GenerateAccesstoken.cause = Required param : grant_type

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

התגובות האלה נשלחות חזרה ללקוח אם <GenerateResponse> הפרמטר הוא true.

אם הערך של <GenerateResponse> הוא true, המדיניות מחזירה שגיאות בפורמט הזה בשביל פעולות שיוצרות אסימונים וקודים. לרשימה מלאה, אפשר לעיין במאמר: שגיאת HTTP של OAuth הפניה לתגובה.

{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}

אם הערך של <GenerateResponse> הוא true, המדיניות מחזירה שגיאות בפורמט הזה כדי לאמת ולאמת פעולות. לרשימה מלאה, ראו שגיאת HTTP של OAuth הפניה לתגובה.

{  
   {  
      "fault":{  
         "faultstring":"Invalid Access Token",
         "detail":{  
            "errorcode":"keymanagement.service.invalid_access_token"
         }
      }
   }

דוגמה לכלל שגוי

<FaultRule name=OAuthV2 Faults">
    <Step>
        <Name>AM-InvalidClientResponse</Name>
        <Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition>
    </Step>
    <Step>
        <Name>AM-InvalidTokenResponse</Name>
        <Condition>(fault.name = "invalid_access_token")</Condition>
    </Step>
    <Condition>(oauthV2.failed = true) </Condition>
</FaultRule>

סכימת המדיניות

כל סוג מדיניות מוגדר על ידי סכימת XML (.xsd). לידיעתך, המדיניות סכימות זמינות ב-GitHub.

איך לעבוד עם פרוטוקול OAuth שמוגדר כברירת מחדל הגדרה

לכל ארגון (גם ארגון לתקופת ניסיון בחינם) ב-Apigee Edge מוקצה אסימון OAuth נקודת הקצה. נקודת הקצה (endpoint) מוגדרת מראש לפי כללי מדיניות בשרת ה-proxy ל-API שנקרא oauth. אפשר להתחיל להשתמש בנקודת הקצה של האסימון מיד אחרי שיוצרים אותו חשבון ב-Apigee Edge. עבור לפרטים, ראו הסבר על OAuth נקודות קצה (endpoints).

הטבת אסימוני גישה

כברירת מחדל, אסימוני OAuth2 נמחקים ממערכת Apigee Edge למשך 3 ימים (259,200 שניות) אחרי שיפוג התוקף של אסימון הגישה וגם של אסימון הרענון (אם הוא קיים). במקרים מסוימים, מומלץ לשנות את ברירת המחדל. לדוגמה, ייתכן שתרצו לקצר את זמן המחיקה באופן סופי לערך לחסוך במקום בכונן אם נוצרים מספר גדול של אסימונים.

אם משתמשים ב-Edge for Private Cloud, אפשר לשנות את ברירת המחדל באמצעות ההגדרה מאפייני הארגון, כפי שמוסבר בקטע הזה. (מחיקה לצמיתות של 3 ימים של אסימונים שפג תוקפם רלוונטי ל-Edge for Private Cloud בגרסה 4.19.01 ואילך. בגרסאות קודמות, הפונקציה מרווח המחיקה באופן סופי שמוגדר כברירת מחדל הוא 180 ימים.)

עדכון הגדרות המחיקה באופן סופי של Edge Private Cloud 4.16.01 ואילך

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

מתבצע עדכון של המחיקה באופן סופי הגדרות ל-Edge Private Cloud 4.15.07

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

התנהגות שאינה תואמת ל-RFC

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

פרוטוקול OAuthV2 מחזיר: המאפיין התואם ל-RFC הוא:
"token_type":"BearerToken" "token_type":"Bearer"
"expires_in":"3600" "expires_in":3600

(הערך התואם הוא מספר, ולא מחרוזת).

בנוסף, תגובת השגיאה עבור אסימון רענון שפג תוקפו כאשר grant_type = refresh_token הוא:

{"ErrorCode" : "invalid_request", "Error" :"Refresh Token expired"}

אבל תגובה שתואמת ל-RFC היא:

{"error" : "invalid_grant", "error_description" :"refresh token expired"}

נושאים קשורים