คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
เวอร์ชัน: 1.0.2
ตรวจสอบสิทธิ์กับ Google เพื่อเข้าถึง Google API ที่คุณระบุ
ใช้ส่วนขยายนี้เพื่อรับโทเค็น (OAuth หรือ JWT) สำหรับบริการ Google Cloud จากนั้นใช้โทเค็นสำหรับการเรียก Google API ครั้งต่อๆ ไป เช่น โดยใช้นโยบาย Servicecallout
ตัวอย่างเช่น ในพร็อกซี API คุณอาจได้รับโทเค็นที่มีส่วนขยายนี้ ให้แคชโทเค็นโดยใช้นโยบาย PopulateCache จากนั้นส่งโทเค็นผ่านนโยบาย Serviceคำขอราคาเสนอ เพื่อเข้าถึงบริการ Google Cloud จากภายในโฟลว์พร็อกซี API
ข้อกำหนดเบื้องต้น
เนื้อหานี้มีข้อมูลอ้างอิงสำหรับการกำหนดค่าและการใช้ส่วนขยายนี้ ก่อนที่จะใช้ส่วนขยายจากพร็อกซี API โดยใช้นโยบาย ชิ้นงานข้อความไฮไลต์ คุณต้องดำเนินการต่อไปนี้
ตรวจสอบว่าบัญชีที่ส่วนขยายจะใช้ (ซึ่งเป็นบัญชีที่แสดงโดยบัญชีบริการที่คุณจะใช้สำหรับข้อมูลเข้าสู่ระบบ) มีสิทธิ์เข้าถึงบริการ Google Cloud ที่ส่วนขยายจะตรวจสอบสิทธิ์ด้วย
ใช้เนื้อหาของไฟล์ JSON คีย์บัญชีบริการที่ได้เมื่อเพิ่มและกำหนดค่าส่วนขยายโดยใช้ข้อมูลอ้างอิงการกำหนดค่า
เกี่ยวกับการตรวจสอบสิทธิ์กับ Google Cloud
ส่วนขยายนี้ขอการตรวจสอบสิทธิ์จาก Google Cloud โดยเป็นตัวแทนของสมาชิกที่ระบุในโปรเจ็กต์ Google Cloud คุณใช้ไฟล์ JSON ของบัญชีบริการของสมาชิกโปรเจ็กต์รายดังกล่าวเมื่อกำหนดค่าส่วนขยายนี้
ดังนั้น ส่วนขยายนี้จะเข้าถึงได้เฉพาะทรัพยากรที่สมาชิกรายดังกล่าวมีสิทธิ์เท่านั้น กล่าวคือ การตรวจสอบสิทธิ์ที่สำเร็จโดยส่วนขยายนี้จะขึ้นอยู่กับการจับคู่ระหว่างสิทธิ์ที่ได้รับใน Google Cloud Console กับการเข้าถึงที่ส่วนขยายขอ (ผ่านขอบเขตหรือกลุ่มเป้าหมาย) ระหว่างรันไทม์
โดยทั่วไปแล้ว ขั้นตอนการตรวจสอบสิทธิ์สำหรับการเข้าถึง API จากส่วนขยายนี้มีดังนี้
ตรวจสอบว่าบัญชีบริการสมาชิกที่ส่วนขยายนี้แสดงมีสิทธิ์เข้าถึงทรัพยากรของ Google ที่คุณต้องการเข้าถึง คุณสามารถใช้หน้า Cloud Identity and Access Management (Cloud IAM) ใน Google Cloud Console เพื่อมอบบทบาทให้กับสมาชิกโปรเจ็กต์ที่ส่วนขยายนี้เป็นตัวแทน
ใช้คีย์ JSON บัญชีบริการของสมาชิกรายดังกล่าวเมื่อกำหนดค่าส่วนขยายนี้
เมื่อกำหนดค่านโยบาย ชิ้นงานข้อความไฮไลต์ เพื่อใช้ส่วนขยายนี้ ให้ขอการตรวจสอบสิทธิ์สําหรับทรัพยากรที่สมาชิกโปรเจ็กต์มีสิทธิ์เข้าถึงเท่านั้น
ตัวอย่าง
ตัวอย่างต่อไปนี้แสดงวิธีตรวจสอบสิทธิ์กับ Google Cloud โดยใช้นโยบาย ชิ้นงานข้อความไฮไลต์
รับโทเค็นเพื่อการเข้าถึง
ในตัวอย่างต่อไปนี้ การดำเนินการ 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>
หากการค้นหาแคชไม่ได้เรียกโทเค็นที่แคชไว้ นโยบาย ExtensionTag ต่อไปนี้จะเรียกโทเค็น 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>
หลังจากนโยบาย Extensionข้อความไฮไลต์ ได้เรียกข้อมูลโทเค็นใหม่แล้ว นโยบาย 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 (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" : "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>
ตัวอย่าง: รหัสไคลเอ็นต์ที่รักษาความปลอดภัยด้วย IAP ของ Cloud
ในตัวอย่างต่อไปนี้ การดำเนินการ 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 คีย์บัญชีบริการของคุณ เมื่อส่งผ่านทาง API การจัดการ ค่านี้จะเป็นค่าที่เข้ารหัสฐาน 64 ซึ่งสร้างขึ้นจากไฟล์ JSON ของคีย์บัญชีบริการทั้งหมด | ไม่มี | ใช่ |