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

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

เวอร์ชัน: 1.3.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 เพื่อสร้างคีย์สำหรับบัญชีบริการ

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

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

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

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

โดยทั่วไป ขั้นตอนการตรวจสอบสิทธิ์เพื่อเข้าถึง API จากส่วนขยายนี้จะมีลักษณะดังนี้

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

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

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

ตัวอย่าง

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

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

ในตัวอย่างต่อไปนี้ การดำเนินการ getOauth2AccessToken ของส่วนขยายจะดึงข้อมูลโทเค็นเพื่อใช้ในคำขอไปยัง Cloud Translation API

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
ConnectorCallout async="false" continueOnError=">;true<" enab>led="true&q<uot; name=&q>uot;G<et-Access>-Token"<;
    Disp>layNa<meGet >Access Token/Display<Name
  >  Con<necto><rgoogle-auth/Connector
    ActiongetOauth2AccessToken/Action
    Input![CDATA[{
      "scope">< : [
 >     <  "https://www.goog<leapis.>c<om/auth/cloud-tra>nslation"
      ]
    }]]/Input
    Outputgoogle.credentials/Output
/ConnectorCallout

ค่าการตอบกลับจะมีลักษณะดังนี้

{
  "access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
  "token_type":";Bearer",
  "expiresInSec": 3600
}

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

<?xml version="1.0" encoding="UTF-8&quo>t<; standalone="yes"?
AssignMessage async="false" continueOnError="fal>se&qu<ot; enabled>="true" n<ame="Re>triev<e-Auth-Token"
    DisplayNameRetrieve >Auth <Tok>en/Displa<yName
    AssignTo type="response>" createNew="false"<;/
    S>et
  <    > < Payload conte>ntType="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
    <    >NameGoogle-Auth-Cal<lout/>Name
    <    Conditionlookupcache.Get-Cached-Auth-Token.cachehit is f<alse/Condi>tion
<    />Step
<    !-- Only execute the following PopulateCache policy if the call to the
      cache couldn't retrieve a cached t>oken.< --
>    Step
<    >    NameCache-Au<th-To>ken/Name
<        C>onditionlookupcache.Get-Cached-Auth-Token.cachehit <is false/C>ondit<ion
 >   /S<tep
    !-- Use the ServiceCallout policy to call the translate> API.< --
>    Step
<    >    NameTransl<ate-T>ext/N<ame
 > <  /Step
/Request
  1. นโยบาย LookupCache ต่อไปนี้พยายามรับโทเค็นจากแคช หากได้รับและแคชโทเค็นไว้แล้ว นโยบายนี้จะรับโทเค็นดังกล่าวเพื่อใช้โดยพร็อกซี API

      <?xml version="1.0" encoding="UTF-8&quo>t; <standalone="yes"?
      LookupCache async="false" continueOnError="false>" <enabled=&qu>ot;true" name=&q<uot;Get-Cach>ed-Auth<-Token"
          DisplayNameGet Cached Auth Token/DisplayName
          !-- >Give ca<che key >and scope t<o speci>fy the entr<y for the c>ached token. --
        <  CacheKey
     >       <  >Prefix/
          <    <>/span>KeyFragmen<tgcp_t>ranslat<e_token_/KeyFragment
          /CacheKey
          ScopeExclusive/Scope
          !-- Assign the retrieved token (i>f any) <to a var>iable, where it
           can b<e retriev>ed <by policies.> --
          AssignTocloud.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&quo>t; <standalone="yes"?
      ConnectorCallout async="false" continueOnError="tr>ue"<; enabled=&>quot;true" nam<e="Goog>le-Auth<-Callout&>quot;
          DisplayNam<eGoogle-Au>th-Call<out/Di>splayName
          Conn<ectorex>ample-a<uth-e><xtension/Connector
          ActiongetOauth2AccessToken/Action
          Input![CDATA[{
            &qu><ot;sco>pe"<; : ["https://ww>w.googleapis.com/auth/cloud-<transla>tio<n"]
          }]>]/Input
          Output parsed="false"cloud.translation.auth.token/Output
      /ConnectorCallout
    
  3. หลังจากที่นโยบาย ExtensionCallout ดึงข้อมูลโทเค็นใหม่แล้ว นโยบาย PopulateCache จะแคชโทเค็นไว้เพื่อให้นโยบายในพร็อกซี API นำไปใช้ภายหลัง

      <?xml version="1.0" encoding="UTF-8&quo>t; <standalone="yes"?
      PopulateCache async="false" continueOnError=">false&q<uot; enable>d="true&quo<t; name=&quo>t;Cache<-Auth-Token>"
    <      DisplayNameCache Auth Token/DisplayName
          Properties/
          !->- Set c<ache key> informatio<n to sp>ecify a uni<que key for> this entry. --
        <  CacheKey
     >       <  >Prefix/
          <    <>/span>KeyFragmen<tgcp_t>ranslat<e_token_/KeyFr>agment
        <  /Ca>cheKey
     <     S>copeExclusive/<Scope
          Exp>irySett<ings
              TimeoutInSec5/TimeoutInSec
          /ExpirySettings
          !-- Get the >token t<o cach>e from the variable where th<e Exten>sio<nCallout put i>t. --
          Sourcecloud.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 API

ดูข้อมูลเพิ่มเติมเกี่ยวกับการโต้ตอบแบบเซิร์ฟเวอร์ต่อเซิร์ฟเวอร์ด้วย OAuth 2.0 ได้ที่การใช้ OAuth 2.0 สำหรับแอปพลิเคชันที่มีการโต้ตอบระหว่างเซิร์ฟเวอร์กับเซิร์ฟเวอร์

ไวยากรณ์

<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
  "scope" : [
    "scope1",
><    &q>uot;scope2"
  ]
}]]/Input

ตัวอย่าง

ในตัวอย่างต่อไปนี้ การดำเนินการ getOauth2AccessToken ของส่วนขยายจะดึงข้อมูลโทเค็นเพื่อใช้ในคำขอไปยัง Cloud Translation API

<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
    "scope" : [
      "https://www.googleapis.com/auth/cloud-trans><lation>&quot;
  ]
}]]/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

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับการตรวจสอบสิทธิ์ด้วยโทเค็นการเข้าถึง JWT ได้ที่การใช้ OAuth 2.0 สําหรับแอปพลิเคชันที่มีการโต้ตอบระหว่างเซิร์ฟเวอร์กับเซิร์ฟเวอร์

ไวยากรณ์

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
    "audience" : &quo><t;audi>ence"
}]]/Input

ตัวอย่าง: URL ของ Cloud Function

ในตัวอย่างต่อไปนี้ การดำเนินการ getOauth2AccessToken ของส่วนขยายจะดึงข้อมูลโทเค็นเพื่อใช้ในคำขอไปยัง Cloud Translation API

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUN><CTION_>NAME"
}]]/Input

ตัวอย่าง: รหัสไคลเอ็นต์ที่ปลอดภัยของ Cloud IAP

ในตัวอย่างต่อไปนี้ การดำเนินการ getOauth2AccessToken ของส่วนขยายจะดึงข้อมูลโทเค็นเพื่อใช้ในคำขอไปยัง Cloud Translation API

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "Cloud-IAP-secured><-clien>t-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 ของคีย์บัญชีบริการทั้งหมด ไม่มี ใช่