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

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

גרסה: 1.0.2

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

דוגמאות

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

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

בחלק מממשקי ה-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>

דוגמה: מזהה לקוח באבטחת IAP ב-Cloud

בדוגמה הבאה, הפעולה 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 של מפתח חשבון השירות. ללא כן