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

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

גרסה: 2.0.2

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

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

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

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

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

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

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

      <?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. אם החיפוש במטמון לא מאחזר אסימון במטמון, המדיניות ExtensionCallout הבאה מאחזרת אסימון OAuth חדש, ומציינת את Google Cloud Translation API כהיקף של האסימון. אם פרטי הכניסה של חשבון השירות שבהם השתמשתם כשקבעתם את ההגדרות של התוסף Google-Auth-Callout מייצגים חבר בפרויקט שיש לו גישה ל-API, ב-Google Cloud יוחזר טוקן תקין.

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

ב-OAuth עם שני רגליים, פעולת התוסף הזו מאחזרת אסימון OAuth על ידי אימות ב-Google באמצעות JSON של חשבון שירות (מוסיפים את ה-JSON הזה כשמגדירים את התוסף). אחרי שהפעולה הזו מאחזרת את אסימון ה-OAuth, פרוקסי ה-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. מערך ["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 שאתם רוצים לקרוא יש הגדרת שירות שפורסמה במאגר Google APIs ב-GitHub.

בממשקי Google APIs מסוימים, אפשר לבצע קריאות מורשות ל-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 תוקף בשניות. 3600 כן

הסבר על ההגדרות

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

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

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

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

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

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

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