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

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

เวอร์ชัน: 1.3.1

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

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

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

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

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

  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 Console เพื่อมอบบทบาทแก่สมาชิกโปรเจ็กต์ที่ส่วนขยายนี้เป็นตัวแทน

  2. ใช้คีย์บัญชีบริการ JSON ของสมาชิกรายนั้นเมื่อกำหนดค่าส่วนขยายนี้

  3. เมื่อกำหนดค่านโยบาย ExtensionExtension เพื่อใช้ส่วนขยายนี้ ให้ขอการตรวจสอบสิทธิ์สำหรับทรัพยากรที่สมาชิกโปรเจ็กต์มีสิทธิ์เข้าถึงเท่านั้น

ลองฟัง

ตัวอย่างต่อไปนี้แสดงวิธีตรวจสอบสิทธิ์กับ Google Cloud โดยใช้นโยบาย Extensionคำขอราคาเสนอ

รับโทเค็นเพื่อการเข้าถึง

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

<?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. หากการค้นหาแคชไม่เรียกโทเค็นที่แคชไว้ นโยบาย Extensionต้องระบุ (ส่วนขยายไฮไลต์) ต่อไปนี้จะเรียกโทเค็น 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. หลังจากนโยบาย ExtensionAPI เรียกข้อมูลโทเค็นใหม่ นโยบาย CaptioneCache จะแคชโทเค็นเพื่อใช้ในภายหลังตามนโยบายในพร็อกซี 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 API เมื่อ Google API ต้องใช้โทเค็น 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>

พารามิเตอร์คำขอ

พารามิเตอร์ คำอธิบาย Type ค่าเริ่มต้น จำเป็น
ขอบเขต อาร์เรย์ของขอบเขต 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 จำนวนวินาทีที่โทเค็นจะหมดอายุ 3,600 มี

getJWTAccessToken

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

เมื่อใช้ Google API บางตัว คุณจะเรียก 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 หมดอายุในไม่กี่วินาที 3,600 มี

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

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

คุณสมบัติส่วนขยายที่พบบ่อย

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

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

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

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

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