คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
เวอร์ชัน: 1.3.1
ตรวจสอบสิทธิ์กับ Google เพื่อเข้าถึง Google API ที่คุณระบุ
ใช้ส่วนขยายนี้เพื่อรับโทเค็น (OAuth หรือ JWT) สำหรับบริการ Google Cloud จากนั้นใช้โทเค็นสำหรับการเรียกใช้ Google API ในภายหลัง เช่น โดยใช้นโยบาย ServiceCallout
ตัวอย่างเช่น ในพร็อกซี API คุณอาจรับโทเค็นด้วยส่วนขยายนี้ แคชโทเค็นโดยใช้นโยบาย PopulateCache จากนั้นส่งโทเค็นผ่านนโยบาย ServiceCallout เพื่อเข้าถึงบริการ Google Cloud จากภายในโฟลว์พร็อกซี API
ข้อกำหนดเบื้องต้น
เนื้อหานี้มีข้อมูลอ้างอิงสำหรับการกำหนดค่าและการใช้ส่วนขยายนี้ ก่อนใช้ส่วนขยายจากพร็อกซี API โดยใช้นโยบาย ExtensionCallout คุณต้องดำเนินการดังนี้
ตรวจสอบว่าบัญชีที่ส่วนขยายจะใช้ ซึ่งเป็นบัญชีที่แสดงโดยบัญชีบริการที่คุณจะใช้สำหรับข้อมูลเข้าสู่ระบบ มีสิทธิ์เข้าถึงบริการ Google Cloud ที่ส่วนขยายจะตรวจสอบสิทธิ์
ใช้เนื้อหาของไฟล์ JSON คีย์บัญชีบริการที่ได้เมื่อ เพิ่มและกำหนดค่าส่วนขยายโดยใช้ข้อมูลอ้างอิงการกำหนดค่า
เกี่ยวกับการตรวจสอบสิทธิ์กับ Google Cloud
ส่วนขยายนี้ขอการตรวจสอบสิทธิ์จาก Google Cloud โดยแสดงสมาชิกที่เฉพาะเจาะจงซึ่งกำหนดไว้ในโปรเจ็กต์ Google Cloud คุณใช้ไฟล์ JSON ของบัญชีบริการของสมาชิกโปรเจ็กต์นั้นเมื่อกำหนดค่าส่วนขยายนี้
ด้วยเหตุนี้ ส่วนขยายนี้จึงมีสิทธิ์เข้าถึงเฉพาะทรัพยากรที่สมาชิกดังกล่าวมีสิทธิ์เท่านั้น กล่าวอีกนัยหนึ่ง การตรวจสอบสิทธิ์ที่สำเร็จโดยส่วนขยายนี้ขึ้นอยู่กับการจับคู่ระหว่างสิทธิ์ที่ได้รับในคอนโซล Google Cloud กับการเข้าถึงที่ส่วนขยายขอ (ผ่านขอบเขตหรือ Audience) ในรันไทม์
โดยทั่วไป ขั้นตอนในการตรวจสอบสิทธิ์เพื่อเข้าถึง API จากส่วนขยายนี้จะมีดังนี้
ตรวจสอบว่าบัญชีบริการของสมาชิกที่ส่วนขยายนี้แสดงมีสิทธิ์เข้าถึงทรัพยากรของ Google ที่คุณต้องการเข้าถึง คุณสามารถใช้หน้า Cloud Identity and Access Management (Cloud IAM) ใน คอนโซล Google Cloud เพื่อ มอบบทบาท ให้กับสมาชิกโปรเจ็กต์ที่ส่วนขยายนี้แสดง
ใช้คีย์ JSON ของบัญชีบริการของสมาชิกนั้นเมื่อกำหนดค่าส่วนขยายนี้
เมื่อกำหนดค่านโยบาย 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>
นโยบาย 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>หากการค้นหาแคชไม่พบโทเค็นที่แคชไว้ นโยบาย 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>หลังจากที่นโยบาย 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 API ต้องใช้โทเค็น OAuth
ใน OAuth แบบ 2 ทาง การดำเนินการส่วนขยายนี้จะดึงข้อมูลโทเค็น OAuth โดยการตรวจสอบสิทธิ์กับ Google โดยใช้ JSON ของบัญชีบริการ (คุณเพิ่ม JSON ดังกล่าวเมื่อกำหนดค่าส่วนขยายนี้) เมื่อการดำเนินการนี้ดึงข้อมูลโทเค็น OAuth แล้ว พร็อกซี API จะใช้โทเค็นเพื่อเรียกใช้ Google API ซึ่งเป็นการเรียกใช้ 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 API ได้หาก API ที่คุณต้องการเรียกใช้มีคำจำกัดความของบริการที่เผยแพร่ในที่เก็บ Google APIs GitHub
Google API บางรายการอนุญาตให้คุณเรียกใช้ 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 คีย์บัญชีบริการทั้งหมด | ไม่มี | ใช่ |