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

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

เวอร์ชัน: 2.0.0

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

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

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

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

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

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

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

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

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

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

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

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

getJWTAccessToken

รับโทเค็นเพื่อการเข้าถึง JSON Web Token (JWT) คุณสามารถใช้โทเค็นนี้เพื่อตรวจสอบสิทธิ์กับ Google APIs ได้หาก API ที่คุณต้องการเรียกใช้มีคำจำกัดความของบริการที่เผยแพร่ในที่เก็บ Google APIs GitHub

Google APIs บางรายการอนุญาตให้คุณเรียกใช้ API ที่ได้รับอนุญาตโดยใช้ JWT ที่ลงชื่อแล้วโดยตรงเป็นโทเค็น Bearer แทนโทเค็นเพื่อการเข้าถึง 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 คีย์บัญชีบริการทั้งหมด ไม่มี ใช่