Apigee Edge के दस्तावेज़ देखे जा रहे हैं.
Apigee X के दस्तावेज़ पर जाएं. info
वर्शन: 1.3.1
आपने Google API को ऐक्सेस करने के लिए जो अनुमति दी है उसके लिए Google से पुष्टि करें.
इस एक्सटेंशन का इस्तेमाल करके, Google Cloud सेवाओं के लिए टोकन (OAuth या JWT) पाएं. इसके बाद, इस टोकन का इस्तेमाल Google API को कॉल करने के लिए करें. जैसे, ServiceCallout नीति का इस्तेमाल करके.
उदाहरण के लिए, इस एक्सटेंशन की मदद से किसी एपीआई प्रॉक्सी में टोकन मिल सकता है. इसके बाद, PopulateCache नीति का इस्तेमाल करके टोकन को कैश मेमोरी में सेव किया जा सकता है. इसके बाद, ServiceCallout नीति के ज़रिए टोकन को पास करके, एपीआई प्रॉक्सी फ़्लो में Google Cloud सेवाओं को ऐक्सेस किया जा सकता है.
ज़रूरी शर्तें
इस कॉन्टेंट में, इस एक्सटेंशन को कॉन्फ़िगर करने और इस्तेमाल करने के बारे में जानकारी दी गई है. ExtensionCallout नीति का इस्तेमाल करके, एपीआई प्रॉक्सी से एक्सटेंशन का इस्तेमाल करने से पहले, आपको ये काम करने होंगे:
पक्का करें कि एक्सटेंशन जिस खाते का इस्तेमाल करेगा उसके पास, Google Cloud की उन सेवाओं का ऐक्सेस हो जिनके लिए एक्सटेंशन पुष्टि करेगा. यह वह खाता होना चाहिए जिसे सेवा खाते से दिखाया जाता है. सेवा खाते का इस्तेमाल क्रेडेंशियल के लिए किया जाएगा.
Google Cloud Console का इस्तेमाल करके, सेवा खाते के लिए कुंजी जनरेट करें.
कॉन्फ़िगरेशन रेफ़रंस का इस्तेमाल करके एक्सटेंशन को जोड़ने और कॉन्फ़िगर करने के दौरान, सेवा खाते की कुंजी वाली JSON फ़ाइल के कॉन्टेंट का इस्तेमाल करें.
Google Cloud से पुष्टि करने के बारे में जानकारी
यह एक्सटेंशन, Google Cloud से पुष्टि करने का अनुरोध करता है. इसके लिए, यह आपके Google Cloud प्रोजेक्ट में तय किए गए किसी सदस्य की जानकारी देता है. इस एक्सटेंशन को कॉन्फ़िगर करते समय, आपको उस प्रोजेक्ट मेंबर के सेवा खाते की JSON फ़ाइल का इस्तेमाल करना होगा.
इसलिए, इस एक्सटेंशन के पास सिर्फ़ उन संसाधनों का ऐक्सेस होगा जिनके लिए उस सदस्य के पास अनुमति है. दूसरे शब्दों में कहें, तो इस एक्सटेंशन से पुष्टि हो पाएगी या नहीं, यह इस बात पर निर्भर करता है कि Google Cloud Console में दी गई अनुमतियां और एक्सटेंशन की ओर से रनटाइम में स्कोप या ऑडियंस के ज़रिए अनुरोध किया गया ऐक्सेस मेल खाता है या नहीं.
आम तौर पर, इस एक्सटेंशन से एपीआई को ऐक्सेस करने के लिए पुष्टि करने का तरीका यह होगा:
पक्का करें कि जिस सदस्य सेवा खाते के लिए यह एक्सटेंशन काम कर रहा है उसके पास उस Google संसाधन का ऐक्सेस हो जिसे आपको ऐक्सेस करना है. Google Cloud Console में Cloud Identity and Access Management (Cloud IAM) पेज का इस्तेमाल करके, प्रोजेक्ट के उस सदस्य को भूमिकाएं असाइन की जा सकती हैं जिसे यह एक्सटेंशन दिखाता है.
इस एक्सटेंशन को कॉन्फ़िगर करते समय, उस सदस्य के सेवा खाते की कुंजी वाले JSON का इस्तेमाल करें.
इस एक्सटेंशन का इस्तेमाल करने के लिए, ExtensionCallout नीति को कॉन्फ़िगर करते समय, सिर्फ़ उन संसाधनों के लिए पुष्टि करने का अनुरोध करें जिन्हें आपके प्रोजेक्ट के सदस्य ऐक्सेस कर सकते हैं.
सैंपल
यहां दिए गए उदाहरणों में, ExtensionCallout नीति का इस्तेमाल करके, 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 कैश से टोकन को फिर से पाना, नया टोकन पाने की तुलना में ज़्यादा तेज़ होगा. कैश किए गए टोकन की समयसीमा खत्म होने पर, नया टोकन पाएं और उससे कैश मेमोरी को रीफ़्रेश करें.
यहां एक उदाहरण एपीआई प्रॉक्सी का कोड दिया गया है. इससे पता चलता है कि ServiceCallout नीति के साथ Google Translate API को कॉल करने के लिए, कैश किए गए टोकन को कैसे सेट किया जाता है और उसका इस्तेमाल कैसे किया जाता है. यहां दिए गए कोड के हर उदाहरण में, फ़्लो में मौजूद किसी अलग नीति के बारे में बताया गया है.
यहां दी गई नीतियां, इस क्रम में लागू की जाती हैं. इस क्रम के बारे में, यहां दिए गए फ़्लो एक्सएमएल में बताया गया है:
<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 नीति, कैश मेमोरी से टोकन पाने की कोशिश करती है. अगर टोकन पहले ही मिल चुका है और कैश मेमोरी में सेव है, तो यह नीति इसे एपीआई प्रॉक्सी के इस्तेमाल के लिए उपलब्ध कराएगी.
<?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-Auth-Calloutएक्सटेंशन को कॉन्फ़िगर करते समय इस्तेमाल किए गए सेवा खाते के क्रेडेंशियल, ऐसे प्रोजेक्ट मेंबर के हैं जिसके पास एपीआई का ऐक्सेस है, तो Google Cloud एक मान्य टोकन दिखाता है.<?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 नीति उसे कैश मेमोरी में सेव करती है. इससे एपीआई प्रॉक्सी में मौजूद नीतियां बाद में उसका इस्तेमाल कर पाती हैं.
<?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 ऐक्सेस टोकन मिलता है. इस कार्रवाई का इस्तेमाल, Google API और आपकी एपीआई प्रॉक्सी के बीच दो लेग वाले OAuth को सपोर्ट करने के लिए करें. ऐसा तब करें, जब Google API को OAuth टोकन की ज़रूरत हो.
Two-legged OAuth में, यह एक्सटेंशन कार्रवाई, सेवा खाते के JSON का इस्तेमाल करके Google से पुष्टि करती है और OAuth टोकन वापस पाती है. इस एक्सटेंशन को कॉन्फ़िगर करते समय, आपको वह JSON जोड़ना होता है. इस कार्रवाई से OAuth टोकन मिलने के बाद, आपकी एपीआई प्रॉक्सी इस टोकन का इस्तेमाल करके Google API को कॉल कर सकती है. इसका मतलब है कि Google सेवा खाते की ओर से एपीआई को कॉल किया जा सकता है.
Google Cloud API को ऐक्सेस करने की अनुमति, Google APIs के लिए OAuth 2.0 स्कोप में दी गई अनुमतियों के आधार पर दी जाती है.
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 स्कोप का एक कलेक्शन. स्कोप के बारे में ज़्यादा जानने के लिए, Google API के लिए OAuth 2.0 के स्कोप लेख पढ़ें. | Array | ["https://www.googleapis.com/auth/cloud-platform"], जो उन सभी एपीआई को ऐक्सेस करने की अनुमति देता है जिन्हें सेवा खाता ऐक्सेस कर सकता है. |
नहीं. |
जवाब
यह एक ऑब्जेक्ट होता है. इसमें ऐक्सेस टोकन, उसका टाइप, और उसके खत्म होने की तारीख इस फ़ॉर्म में होती है:
{
"accessToken": "ewogICJ0eXB...C5jb20iCn0K",
"token_type": "Bearer",
"expiresInSec": 3600
}
जवाब की प्रॉपर्टी
| पैरामीटर | ब्यौरा | डिफ़ॉल्ट | ज़रूरी है |
|---|---|---|---|
| accessToken | OAuth 2.0 ऐक्सेस टोकन. | कोई नहीं | हां |
| tokenType | टोकन का टाइप. | धारक | हां |
| expiresInSec | टोकन की समयसीमा खत्म होने में बचे हुए सेकंड की संख्या. | 3600 | हां |
getJWTAccessToken
यह JSON वेब टोकन (JWT) ऐक्सेस टोकन को ऐक्सेस करता है. अगर आपको जिस एपीआई को कॉल करना है उसकी सेवा की परिभाषा, Google APIs GitHub डेटाबेस में पब्लिश की गई है, तो इस टोकन का इस्तेमाल Google APIs के साथ पुष्टि करने के लिए किया जा सकता है.
Google के कुछ एपीआई के साथ, सीधे तौर पर हस्ताक्षर किए गए JWT का इस्तेमाल, धारक टोकन के तौर पर किया जा सकता है. इससे, OAuth 2.0 ऐक्सेस टोकन के बजाय, एपीआई कॉल को अनुमति दी जा सकती है. ऐसा होने पर, एपीआई कॉल करने से पहले, आपको Google के अनुमति सर्वर को नेटवर्क अनुरोध करने की ज़रूरत नहीं पड़ती.
JWT ऐक्सेस टोकन की मदद से पुष्टि करने के बारे में ज़्यादा जानने के लिए, सर्वर-टू-सर्वर ऐप्लिकेशन के लिए OAuth 2.0 का इस्तेमाल करना लेख पढ़ें.
सिंटैक्स
<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
"audience" : "audience"
}]]></Input>
उदाहरण: 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>
अनुरोध के पैरामीटर
| पैरामीटर | ब्यौरा | डिफ़ॉल्ट | ज़रूरी है |
|---|---|---|---|
| दर्शक | टोकन पाने वाला व्यक्ति. इसमें Cloud IAP से सुरक्षित क्लाइंट आईडी, Cloud Functions का यूआरएल वगैरह शामिल हो सकता है. | कोई नहीं | हां |
जवाब
{
"accessToken": "token",
"tokenType": "Bearer",
"expiresInSec": 3600
}
जवाब की प्रॉपर्टी
| पैरामीटर | ब्यौरा | डिफ़ॉल्ट | ज़रूरी है |
|---|---|---|---|
| accessToken | ऐक्सेस टोकन. | कोई नहीं | हां |
| tokenType | टोकन का टाइप. | धारक | हां |
| expiresInSec | सेकंड में समयसीमा खत्म होने की जानकारी. | 3600 | हां |
कॉन्फ़िगरेशन का रेफ़रंस
एपीआई प्रॉक्सी में इस एक्सटेंशन का इस्तेमाल करने के लिए, इसे कॉन्फ़िगर और डिप्लॉय करते समय इनका इस्तेमाल करें. Apigee कंसोल का इस्तेमाल करके एक्सटेंशन को कॉन्फ़िगर करने का तरीका जानने के लिए, एक्सटेंशन जोड़ना और उसे कॉन्फ़िगर करना लेख पढ़ें.
एक्सटेंशन की सामान्य प्रॉपर्टी
हर प्रॉपर्टी के लिए नीचे दी गई प्रॉपर्टी मौजूद हैं.
| प्रॉपर्टी | जानकारी | डिफ़ॉल्ट | ज़रूरी है |
|---|---|---|---|
name |
वह नाम, जिसे आप एक्सटेंशन का यह कॉन्फ़िगरेशन दे रहे हैं. | कभी नहीं | हां |
packageName |
एक्सटेंशन पैकेज का नाम, जो Apigee Edge से दिया गया है. | कभी नहीं | हां |
version |
उस एक्सटेंशन पैकेज का वर्शन नंबर जिससे आपको एक्सटेंशन कॉन्फ़िगर करना है. | कभी नहीं | हां |
configuration |
आप जिस एक्सटेंशन को जोड़ रहे हैं उसके लिए खास तौर पर कॉन्फ़िगरेशन वैल्यू. इस एक्सटेंशन पैकेज के लिए प्रॉपर्टी देखें | कभी नहीं | हां |
इस एक्सटेंशन पैकेज के लिए प्रॉपर्टी
इस एक्सटेंशन के लिए, यहां दी गई कॉन्फ़िगरेशन प्रॉपर्टी की वैल्यू तय करें.
| प्रॉपर्टी | ब्यौरा | डिफ़ॉल्ट | ज़रूरी है |
|---|---|---|---|
| क्रेडेंशियल | Apigee Edge कंसोल में डालने पर, यह आपकी सेवा खाते की कुंजी वाली JSON फ़ाइल का पूरा कॉन्टेंट होता है. मैनेजमेंट एपीआई के ज़रिए भेजे जाने पर, यह पूरी सेवा खाते की कुंजी वाली JSON फ़ाइल से जनरेट किया गया base64-encoded वैल्यू होता है. | कोई नहीं | हां |