ส่วนขยายการตรวจสอบสิทธิ์ของ Google

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
info

เวอร์ชัน: 2.0.2

ตรวจสอบสิทธิ์กับ Google เพื่อเข้าถึง Google API ที่คุณระบุ

ใช้ส่วนขยายนี้เพื่อรับโทเค็น (OAuth หรือ JWT) สำหรับบริการ Google Cloud จากนั้นใช้โทเค็นสำหรับการเรียก Google API ในครั้งต่อๆ ไป เช่น โดยใช้นโยบาย ServiceCallout

ตัวอย่างเช่น ในพร็อกซี API คุณอาจได้รับโทเค็นที่มีส่วนขยายนี้ แคชโทเค็นโดยใช้นโยบาย PopulateCache จากนั้นส่งโทเค็นโดยใช้นโยบาย ServiceCallout เพื่อเข้าถึงบริการ Google Cloud จากภายในโฟลว์พร็อกซี API

ข้อกำหนดเบื้องต้น

เนื้อหานี้เป็นข้อมูลอ้างอิงสำหรับการกำหนดค่าและการใช้ส่วนขยายนี้ ก่อนใช้ส่วนขยายจากพร็อกซี API โดยใช้นโยบาย ExtensionCallout คุณต้องทำดังนี้

  1. ตรวจสอบว่าบัญชีที่ส่วนขยายจะใช้ ซึ่งก็คือบัญชีที่แสดงโดยบัญชีบริการที่คุณจะใช้สำหรับข้อมูลเข้าสู่ระบบ มีสิทธิ์เข้าถึงบริการ Google Cloud ที่ส่วนขยายจะใช้ในการตรวจสอบสิทธิ์

  2. ใช้ Google Cloud Console เพื่อสร้างคีย์สำหรับบัญชีบริการ

  3. ใช้เนื้อหาของไฟล์ JSON ของคีย์บัญชีบริการที่ได้เมื่อเพิ่มและกำหนดค่าส่วนขยายโดยใช้ข้อมูลอ้างอิงการกำหนดค่า

เกี่ยวกับการตรวจสอบสิทธิ์กับ Google Cloud

ส่วนขยายนี้ขอการตรวจสอบสิทธิ์จาก Google Cloud โดยแสดงสมาชิกที่เฉพาะเจาะจงซึ่งกำหนดไว้ในโปรเจ็กต์ Google Cloud คุณใช้ไฟล์ JSON ของบัญชีบริการของสมาชิกโปรเจ็กต์นั้นเมื่อกำหนดค่าส่วนขยายนี้

ด้วยเหตุนี้ ส่วนขยายนี้จึงมีสิทธิ์เข้าถึงเฉพาะทรัพยากรที่สมาชิกรายนั้นมีสิทธิ์ กล่าวคือ การตรวจสอบสิทธิ์ที่สำเร็จโดยส่วนขยายนี้ขึ้นอยู่กับการจับคู่ระหว่างสิทธิ์ที่ให้ใน Google Cloud Console กับสิทธิ์เข้าถึงที่ส่วนขยายร้องขอ (ผ่านขอบเขตหรือกลุ่มเป้าหมาย) ในขณะรันไทม์

โดยทั่วไป ขั้นตอนในการตรวจสอบสิทธิ์เพื่อเข้าถึง 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 และคัดลอกค่าดังกล่าวในเพย์โหลดการตอบกลับ ซึ่งจะมีประโยชน์ในการแก้ไขข้อบกพร่อง ในทางปฏิบัติจริง คุณอาจไม่ต้องการส่งคืนโทเค็นให้กับไคลเอ็นต์

<?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 ตัวอย่างแสดงวิธีตั้งค่าและใช้โทเค็นที่แคชไว้เพื่อเรียก 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

      <?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 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

      <?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 แบบ 2 ขา ระหว่างพร็อกซี API กับ Google APIs เมื่อ Google APIs ต้องการโทเค็น OAuth

ใน OAuth แบบ 2 ขา การดำเนินการของส่วนขยายนี้จะดึงโทเค็น OAuth โดยการตรวจสอบสิทธิ์กับ Google โดยใช้ JSON ของบัญชีบริการ (คุณจะเพิ่ม JSON นั้นเมื่อกำหนดค่าส่วนขยายนี้) เมื่อการดำเนินการนี้ดึงโทเค็น OAuth แล้ว พร็อกซี 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 ประเภทโทเค็น Bearer ใช่
expiresInSec จำนวนวินาทีจนกว่าโทเค็นจะหมดอายุ 3600 ใช่

getJWTAccessToken

รับโทเค็นเพื่อการเข้าถึง JSON Web Token (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 Function

ในตัวอย่างต่อไปนี้ การดำเนินการ 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 ประเภทโทเค็น Bearer ใช่
expiresInSec การหมดอายุเป็นวินาที 3600 ใช่

ข้อมูลอ้างอิงการกำหนดค่า

ใช้ข้อมูลต่อไปนี้เมื่อกำหนดค่าและติดตั้งใช้งานส่วนขยายนี้เพื่อใช้ในพร็อกซี API ดูขั้นตอนการกำหนดค่าส่วนขยายโดยใช้คอนโซล Apigee ได้ที่การเพิ่มและการกำหนดค่าส่วนขยาย

คุณสมบัติส่วนขยายทั่วไป

พร็อพเพอร์ตี้ต่อไปนี้มีอยู่ในส่วนขยายทุกรายการ

พร็อพเพอร์ตี้ คำอธิบาย ค่าเริ่มต้น ต้องระบุ
name ชื่อที่คุณกําหนดให้การกําหนดค่านี้ของส่วนขยาย ไม่มี ได้
packageName ชื่อแพ็กเกจส่วนขยายที่ระบุโดย Apigee Edge ไม่มี ได้
version หมายเลขเวอร์ชันของแพ็กเกจส่วนขยายที่คุณกําหนดค่าส่วนขยาย ไม่มี ได้
configuration ค่าการกําหนดค่าเฉพาะสําหรับส่วนขยายที่คุณกําลังเพิ่ม ดูพร็อพเพอร์ตี้สําหรับแพ็กเกจส่วนขยายนี้ ไม่มี ได้

พร็อพเพอร์ตี้สำหรับแพ็กเกจส่วนขยายนี้

ระบุค่าสำหรับพร็อพเพอร์ตี้การกำหนดค่าต่อไปนี้ที่เฉพาะเจาะจงสำหรับส่วนขยายนี้

พร็อพเพอร์ตี้ คำอธิบาย ค่าเริ่มต้น ต้องระบุ
ข้อมูลเข้าสู่ระบบ เมื่อป้อนในคอนโซล Apigee Edge นี่คือเนื้อหาทั้งหมดของไฟล์ JSON ของคีย์บัญชีบริการ เมื่อส่งโดยใช้ Management API ค่านี้จะเป็นค่าที่เข้ารหัส Base64 ซึ่งสร้างจากไฟล์ JSON ของคีย์บัญชีบริการทั้งหมด ไม่มี ใช่