אתם צופים במסמכי העזרה של Apigee Edge.
כניסה למסמכי העזרה של Apigee X. info
גרסה: 2.0.0
מבצעים אימות באמצעות Google כדי לקבל גישה לממשקי Google API שציינתם.
אפשר להשתמש בתוסף הזה כדי לקבל אסימון (OAuth או JWT) לשירותי Google Cloud, ואז להשתמש באסימון בקריאות הבאות ל-Google API, למשל באמצעות מדיניות ServiceCallout.
לדוגמה, בשרת proxy ל-API יכול להיות שתקבלו אסימון עם התוסף הזה, תשמרו את האסימון במטמון באמצעות המדיניות של PopulateCache ואז תעבירו את האסימון דרך המדיניות של ServiceCallout כדי לגשת לשירותי Google Cloud מתוך תהליך של שרת proxy ל-API.
דרישות מוקדמות
התוכן הזה מכיל מידע שיעזור לכם להגדיר את התוסף הזה ולהשתמש בו. לפני שמשתמשים בתוסף משרת proxy של API באמצעות מדיניות ExtensionCallout, צריך:
חשוב לוודא שלחשבון שבו התוסף ישתמש – החשבון שמיוצג על ידי חשבון השירות שבו תשתמשו לפרטי הכניסה – יש גישה לשירותי Google Cloud שבאמצעותם התוסף יבצע אימות.
משתמשים בתוכן של קובץ ה-JSON שנוצר של מפתח חשבון השירות כשמוסיפים ומגדירים את התוסף לפי חומר העזר בנושא הגדרה.
מידע על אימות באמצעות Google Cloud
התוסף הזה מבקש אימות מ-Google Cloud על ידי ייצוג של משתמש ספציפי שהוגדר בפרויקט שלכם ב-Google Cloud. כשמגדירים את התוסף הזה, משתמשים בקובץ ה-JSON של חשבון השירות של חבר הצוות בפרויקט.
כתוצאה מכך, לתוסף תהיה גישה רק למשאבים שיש למשתמש הזה הרשאה לגשת אליהם. במילים אחרות, אימות מוצלח באמצעות התוסף הזה תלוי בהתאמה בין ההרשאות שהוקצו במסוף Google Cloud לבין הגישה שהתוסף ביקש (דרך היקפים או קהל) בזמן הריצה.
באופן כללי, השלבים לביצוע אימות לצורך גישה לממשקי API מהתוסף הזה הם:
מוודאים שלחשבון השירות החברי שמייצג את התוסף יש גישה למשאב Google שאליו רוצים לגשת. אפשר להשתמש בדף Cloud Identity and Access Management (Cloud IAM) במסוף Google Cloud כדי להקצות תפקידים לחבר הצוות בפרויקט שאותו מייצג התוסף.
צריך להשתמש ב-JSON של מפתח חשבון השירות של המשתמש הזה כשמגדירים את התוסף.
כשמגדירים מדיניות ExtensionCallout לשימוש בתוסף הזה, צריך לבקש אימות רק למשאבים שלגביהם למשתתף בפרויקט יש גישה.
דוגמאות
בדוגמאות הבאות מוסבר איך לבצע אימות ב-Google Cloud באמצעות מדיניות ExtensionCallout.
אחזור של אסימון גישה
בדוגמה הבאה, הפעולה getOauth2AccessToken
של התוסף מאחזרת אסימון לשימוש בבקשות ל-Cloud Translation API.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="true" enabled="true" name="Get-Access-Token">
<DisplayName>Get Access Token</DisplayName>
<Connector>google-auth</Connector>
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"https://www.googleapis.com/auth/cloud-translation"
]
}]]></Input>
<Output>google.credentials</Output>
</ConnectorCallout>
ערך התגובה נראה בערך כך:
{
"access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
"token_type":"Bearer",
"expiresInSec": 3600
}
מדיניות AssignMessage הבאה מאחזרת את ערך התגובה ממדיניות ExtensionCallout שלמעלה ומעתיקה אותו לעומס התגובה. האפשרות הזו יכולה להיות שימושית לניפוי באגים. בפועל, יכול להיות שלא תרצו להחזיר את האסימון ללקוח.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Retrieve-Auth-Token">
<DisplayName>Retrieve Auth Token</DisplayName>
<AssignTo type="response" createNew="false"/>
<Set>
<Payload contentType="application/json">{google.credentials.access_token}</Payload>
</Set>
</AssignMessage>
שמירת טוקן גישה במטמון
כדי להימנע מביצועים מיותרים של קריאות לאחזור אסימון, מומלץ לשמור את האסימון שקיבלת במטמון. בקריאות הבאות שנדרש להן אסימון, אחזור האסימון מהמטמון של Apigee Edge יהיה מהיר יותר מקבלת אסימון חדש. כשפג התוקף של האסימון שנשמר במטמון, צריך לאחזר אסימון חדש ולרענן את המטמון באמצעותו.
הקוד הבא, מדוגמה לשרת proxy של API, מראה איך להגדיר אסימון ששמור במטמון ולהשתמש בו כדי לבצע קריאה ל-Google Translation API עם מדיניות ServiceCallout. כל דוגמת קוד כאן מייצגת מדיניות אחרת בתהליך.
כללי המדיניות הבאים מתבצעים בסדר שמתואר ב-XML הבא:
<Request>
<!-- Attempt to get a token from the cache. -->
<Step>
<Name>Get-Cached-Auth-Token</Name>
</Step>
<!-- Only execute the following ExtensionCallout policy if the call to the
cache couldn't retrieve a cached token. -->
<Step>
<Name>Google-Auth-Callout</Name>
<Condition>lookupcache.Get-Cached-Auth-Token.cachehit is false</Condition>
</Step>
<!-- Only execute the following PopulateCache policy if the call to the
cache couldn't retrieve a cached token. -->
<Step>
<Name>Cache-Auth-Token</Name>
<Condition>lookupcache.Get-Cached-Auth-Token.cachehit is false</Condition>
</Step>
<!-- Use the ServiceCallout policy to call the translate API. -->
<Step>
<Name>Translate-Text</Name>
</Step>
</Request>
המדיניות הבאה של LookupCache מנסה לקבל טוקן מהמטמון. אם האסימון כבר הושג ונשמר במטמון, המדיניות הזו תקבל אותו לשימוש של שרת ה-proxy של ה-API.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <LookupCache async="false" continueOnError="false" enabled="true" name="Get-Cached-Auth-Token"> <DisplayName>Get Cached Auth Token</DisplayName> <!-- Give cache key and scope to specify the entry for the cached token. --> <CacheKey> <Prefix/> <KeyFragment>gcp_translate_token_</KeyFragment> </CacheKey> <Scope>Exclusive</Scope> <!-- Assign the retrieved token (if any) to a variable, where it can be retrieved by policies. --> <AssignTo>cloud.translation.auth.token</AssignTo> </LookupCache>
אם חיפוש המטמון לא מאחזר אסימון ששמור במטמון, המדיניות הבאה של ExtensionCallout מאחזרת אסימון OAuth חדש, ומציינת את Google Cloud Translation API כטווח של האסימון. Google Cloud מחזיר אסימון תקף אם פרטי הכניסה של חשבון השירות ששימשו להגדרת התוסף
Google-Auth-Callout
מייצגים חבר בפרויקט שיש לו גישה ל-API.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ConnectorCallout async="false" continueOnError="true" enabled="true" name="Google-Auth-Callout"> <DisplayName>Google-Auth-Callout</DisplayName> <Connector>example-auth-extension</Connector> <Action>getOauth2AccessToken</Action> <Input><![CDATA[{ "scope" : ["https://www.googleapis.com/auth/cloud-translation"] }]]></Input> <Output parsed="false">cloud.translation.auth.token</Output> </ConnectorCallout>
אחרי שמדיניות ExtensionCallout מאחזרת אסימון חדש, מדיניות PopulateCache שומרת אותו במטמון לשימוש מאוחר יותר על ידי כללי מדיניות בשרת ה-API.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <PopulateCache async="false" continueOnError="false" enabled="true" name="Cache-Auth-Token"> <DisplayName>Cache Auth Token</DisplayName> <Properties/> <!-- Set cache key information to specify a unique key for this entry. --> <CacheKey> <Prefix/> <KeyFragment>gcp_translate_token_</KeyFragment> </CacheKey> <Scope>Exclusive</Scope> <ExpirySettings> <TimeoutInSec>5</TimeoutInSec> </ExpirySettings> <!-- Get the token to cache from the variable where the ExtensionCallout put it. --> <Source>cloud.translation.auth.token</Source> </PopulateCache>
פעולות
getOauth2AccessToken
הפונקציה מקבלת אסימון גישה מסוג OAuth 2.0. משתמשים בפעולה הזו כדי לתמוך ב-OAuth דו-שלבי בין שרת ה-proxy של ה-API לבין ממשקי Google API, כשממשקי Google API דורשים אסימון OAuth.
ב-OAuth דו-שלבי, הפעולה הזו של התוסף מאחזרת אסימון OAuth על ידי אימות מול Google באמצעות JSON של חשבון שירות (מוסיפים את ה-JSON הזה כשמגדירים את התוסף). אחרי הפעולה הזו, אסימון ה-OAuth מאוחזר, ושרתי ה-proxy של ה-API יכולים להשתמש באסימון כדי לבצע קריאות ל-Google APIs, כלומר לבצע קריאה ל-API מטעם חשבון השירות של Google.
הגישה לממשקי Google Cloud API מסוננת לפי ההיקפים שמפורטים במאמר היקפי OAuth 2.0 ל-Google APIs.
מידע נוסף על אינטראקציות בין שרתים באמצעות OAuth 2.0 זמין במאמר שימוש ב-OAuth 2.0 לאפליקציות שרת-אל-שרת.
תחביר
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"scope1",
"scope2"
]
}]]></Input>
דוגמה
בדוגמה הבאה, הפעולה getOauth2AccessToken
של התוסף מאחזרת אסימון לשימוש בבקשות ל-Cloud Translation API.
<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
"scope" : [
"https://www.googleapis.com/auth/cloud-translation"
]
}]]></Input>
פרמטרים של בקשות
פרמטר | תיאור | סוג | ברירת מחדל | חובה |
---|---|---|---|---|
היקף | מערך של היקפי הרשאות OAuth 2.0. מידע נוסף על היקפי הרשאות זמין במאמר היקפי הרשאות של OAuth 2.0 ל-Google APIs. | מערך | ["https://www.googleapis.com/auth/cloud-platform"] , שמעניק גישה לכל ממשקי ה-API שיש לחשבון השירות גישה אליהם. |
לא. |
תשובה
אובייקט שמכיל את אסימון הגישה, את הסוג שלו ואת תאריך התפוגה שלו בפורמט הבא:
{
"accessToken": "ewogICJ0eXB...C5jb20iCn0K",
"token_type": "Bearer",
"expiresInSec": 3600
}
מאפייני התשובה
פרמטר | תיאור | ברירת מחדל | חובה |
---|---|---|---|
accessToken | אסימון גישה מסוג OAuth 2.0. | ללא | כן |
tokenType | סוג האסימון. | פרמטרים לרשת | כן |
expiresInSec | מספר השניות עד שתוקף האסימון יפוג. | 3600 | כן |
getJWTAccessToken
אחזור של אסימון גישה מסוג JSON Web Token (JWT). אפשר להשתמש באסימון הזה כדי לבצע אימות מול Google APIs אם לממשק ה-API שאליו רוצים לקרוא יש הגדרת שירות שפורסמה במאגר GitHub של Google APIs.
בחלק מממשקי Google APIs, אפשר לבצע קריאות API מורשות באמצעות JWT חתום ישירות כאסימון למוכ"ז, במקום אסימון גישה מסוג OAuth 2.0. כשהדבר אפשרי, אפשר להימנע מהצורך לשלוח בקשה ברשת לשרת האימות של Google לפני ביצוע קריאה ל-API.
מידע נוסף על אימות באמצעות אסימון גישה מסוג JWT זמין במאמר שימוש ב-OAuth 2.0 לאפליקציות שרת-אל-שרת.
תחביר
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "audience"
}]]></Input>
דוגמה: כתובת URL של פונקציית Cloud
בדוגמה הבאה, הפעולה getOauth2AccessToken
של התוסף מאחזרת אסימון לשימוש בבקשות ל-Cloud Translation API.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUNCTION_NAME"
}]]></Input>
דוגמה: מזהה לקוח מאובטח ב-Cloud IAP
בדוגמה הבאה, הפעולה getOauth2AccessToken
של התוסף מאחזרת אסימון לשימוש בבקשות ל-Cloud Translation API.
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>
פרמטרים של בקשות
פרמטר | תיאור | ברירת מחדל | חובה |
---|---|---|---|
audience | הנמען המיועד של האסימון. זה יכול להיות מזהה לקוח מאובטח ב-Cloud IAP, כתובת URL של Cloud Functions וכו'. | ללא | כן |
תשובה
{
"accessToken": "token",
"tokenType": "Bearer",
"expiresInSec": 3600
}
מאפייני התשובה
פרמטר | תיאור | ברירת מחדל | חובה |
---|---|---|---|
accessToken | טוקן גישה. | ללא | כן |
tokenType | סוג האסימון. | פרמטרים לרשת | כן |
expiresInSec | התוקף בשניות. | 3600 | כן |
מסמך עזר בנושא הגדרות
השתמשו בהוראות הבאות כשמגדירים ומפרסים את התוסף הזה לשימוש בשרתי proxy ל-API. במאמר הוספה והגדרה של תוסף מוסבר איך להגדיר תוסף באמצעות מסוף Apigee.
מאפייני תוספים נפוצים
המאפיינים הבאים קיימים בכל תוסף.
נכס | תיאור | ברירת המחדל | נדרש |
---|---|---|---|
name |
השם שבחרת לתצורה הזו של התוסף. | ללא | כן |
packageName |
השם של חבילת התוסף כפי שהוא סופק על ידי Apigee Edge. | ללא | כן |
version |
מספר הגרסה של חבילת התוסף שממנה מגדירים את התוסף. | ללא | כן |
configuration |
ערך הגדרה ספציפי לתוסף שרוצים להוסיף. מאפיינים לחבילת תוספים זו | ללא | כן |
הנכסים של חבילת התוספים הזו
מציינים ערכים למאפייני התצורה הבאים שספציפיים לתוסף הזה.
נכס | תיאור | ברירת מחדל | חובה |
---|---|---|---|
פרטי כניסה | כשמוסיפים את הערך הזה במסוף Apigee Edge, הוא מכיל את כל התוכן של קובץ ה-JSON של מפתח חשבון השירות. כשהערך נשלח דרך ה-API לניהול, הוא מקודד ב-base64 ונוצר מכל קובץ ה-JSON של מפתח חשבון השירות. | ללא | כן |