תוסף אימות של Google

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

גרסה: 1.3.1

מבצעים אימות עם Google לגבי גישה לממשקי ה-API של Google שציינתם.

התוסף הזה מאפשר לקבל אסימון (OAuth או JWT) לשירותי Google Cloud, ואז להשתמש באסימון בקריאות הבאות ל-Google API, למשל באמצעות מדיניות ServiceCallout.

לדוגמה, בשרת proxy של API ייתכן שתקבלו אסימון עם התוסף הזה, עליכם לשמור את האסימון במטמון באמצעות המדיניות PopulateCache, ולאחר מכן להעביר את האסימון דרך המדיניות ServiceCallout כדי לגשת לשירותי Google Cloud מתוך זרימה של שרת proxy של API.

דרישות מוקדמות

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

  1. מוודאים שלחשבון שבו התוסף ישתמש (החשבון שמיוצג על ידי חשבון השירות שבו תשתמשו לפרטי הכניסה) יש גישה לשירותי Google Cloud שאיתם יתבצע אימות של התוסף.

  2. משתמשים במסוף Google Cloud כדי ליצור מפתח לחשבון השירות.

  3. במהלך הוספה והגדרה של התוסף באמצעות ההפניה לתצורה, יש להשתמש בתוכן של קובץ ה-JSON עם המפתח של חשבון השירות שמתקבל.

מידע על אימות ב-Google Cloud

התוסף הזה מבקש אימות מ-Google Cloud על ידי ייצוג של חבר מסוים שהוגדר בפרויקט שלך ב-Google Cloud. כשמגדירים את התוסף הזה, צריך להשתמש בקובץ ה-JSON של חשבון השירות של אותו חבר בפרויקט.

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

באופן כללי, השלבים לאימות הגישה לממשקי API מהתוסף הזה הם:

  1. צריך לוודא שלחשבון השירות של החבר שהתוסף הזה מייצג יש גישה למשאב Google שאליו רוצים לגשת. אפשר להשתמש בדף Cloud Identity and Access Management (Cloud IAM) שבמסוף Google Cloud כדי להקצות תפקידים לחבר בפרויקט שהתוסף הזה מייצג.

  2. כשמגדירים את התוסף, צריך להשתמש ב-JSON של מפתח חשבון השירות של אותו חבר.

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

טעימות

בדוגמאות הבאות אפשר לראות איך לבצע אימות ב-Google Cloud באמצעות המדיניות בנושא תוספי יתרונות מרכזיים.

קבלת אסימון גישה

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

<?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>
  1. המדיניות הבאה של 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>
    
  2. אם חיפוש המטמון לא מאחזר אסימון שנשמר במטמון, המדיניות הבאה ExtensionExtension מאחזרת אסימון 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>
    
  3. לאחר שהמדיניות ExtensionCallout תאחזר אסימון חדש, המדיניות PopulateCache תשמור אותו במטמון לשימוש עתידי עבור כללי המדיניות בשרת ה-API של שרת ה-proxy.

      <?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 דו-רגלי בין שרת ה-API של ממשק ה-API לבין Google APIs כשממשקי ה-API של Google דורשים אסימון OAuth.

ב-OAuth דו-רגלי, פעולת התוסף הזו מאחזרת אסימון OAuth על ידי אימות מול Google באמצעות JSON של חשבון שירות (צריך להוסיף את אותו JSON כשתגדירו את התוסף הזה). אחרי שהפעולה הזו מאחזרת את אסימון ה-OAuth, שרת ה-API של ה-API יכול להשתמש באסימון כדי לבצע קריאות ל-Google APIs, וכך לקרוא לממשקי ה-API ביעילות מטעם חשבון השירות של Google.

הגישה אל Google Cloud APIs מסוננת דרך ההיקפים שמפורטים בהיקפי ההרשאות של 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. Array ["https://www.googleapis.com/auth/cloud-platform"], שמעניק גישה לכל ממשקי ה-API שלחשבון השירות יש גישה אליהם. לא.

תשובה

אובייקט שמכיל את אסימון הגישה, הסוג שלו ואת תאריך התפוגה שלו בטופס הבא:

{
  "accessToken": "ewogICJ0eXB...C5jb20iCn0K",
  "token_type": "Bearer",
  "expiresInSec": 3600
}

מאפייני תגובה

פרמטר התיאור ברירת המחדל נדרש
accessToken אסימון גישה מסוג OAuth 2.0. ללא כן
tokenType סוג האסימון. פרמטרים לרשת כן
expiresInSec מספר השניות עד שתוקף האסימון יפוג. 3,600 כן

getJWTAccessToken

הקוד הזה מקבל אסימון גישה מסוג JSON (JWT). אפשר להשתמש באסימון הזה כדי לבצע אימות מול Google APIs, אם ל-API שרוצים לקרוא לו הגדרת שירות פורסמה במאגר Google APIs ב-GitHub.

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

למידע נוסף על אימות באמצעות אסימון גישה של JWT, ראו שימוש ב-OAuth 2.0 לאפליקציות שרת-אל-שרת.

תחביר

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
    "audience" : "audience"
}]]></Input>

דוגמה: כתובת URL של פונקציה ב-Cloud Functions

בדוגמה הבאה, הפעולה 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 תוקף המבצע יפוג בשניות. 3,600 כן

הסבר על הגדרות אישיות

במהלך ההגדרה והפריסה של התוסף הזה לשימוש בשרתי proxy של API, צריך להשתמש בהגדרות הבאות. לשלבים להגדרת תוסף באמצעות מסוף Apigee, אפשר לעיין במאמר הוספה והגדרה של תוסף.

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

המאפיינים הבאים קיימים בכל תוסף.

נכס תיאור ברירת המחדל נדרש
name השם שבחרת לתצורה הזו של התוסף. ללא כן
packageName השם של חבילת התוסף כפי שהוא סופק על ידי Apigee Edge. ללא כן
version מספר הגרסה של חבילת התוסף שממנה מגדירים את התוסף. ללא כן
configuration ערך הגדרה ספציפי לתוסף שרוצים להוסיף. מאפיינים לחבילת תוספים זו ללא כן

המאפיינים של חבילת התוספים הזו

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

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