Google ऑथेंटिकेशन एक्सटेंशन

आपको Apigee Edge दस्तावेज़ दिख रहा है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है इस पेज पर जाएं Apigee X दस्तावेज़.
जानकारी

वर्शन: 1.3.1

आपके बताए गए Google API का ऐक्सेस पाने के लिए Google से पुष्टि करें.

Google Cloud सेवाओं के लिए टोकन (OAuth या JWT) पाने के लिए, इस एक्सटेंशन का इस्तेमाल करें. इसके बाद, Google API को बाद में किए जाने वाले कॉल के लिए टोकन का इस्तेमाल करें. जैसे, सर्विसकॉलआउट नीति का इस्तेमाल करके.

उदाहरण के लिए, किसी एपीआई प्रॉक्सी में, आपको इस एक्सटेंशन के साथ टोकन मिल सकता है. इसके लिए, Autoकैश नीति का इस्तेमाल करके टोकन को कैश मेमोरी में सेव करें. इसके बाद, एपीआई प्रॉक्सी फ़्लो में Google Cloud की सेवाओं को ऐक्सेस करने के लिए, सर्विस कॉलआउट नीति के ज़रिए टोकन पास करें.

ज़रूरी शर्तें

इस कॉन्टेंट में, इस एक्सटेंशन को कॉन्फ़िगर करने और इसका इस्तेमाल करने के बारे में जानकारी दी गई है. एक्सटेंशन कॉलआउट की नीति की मदद से, किसी एपीआई प्रॉक्सी के एक्सटेंशन का इस्तेमाल करने से पहले, आपको ये काम करने होंगे:

  1. पक्का करें कि एक्सटेंशन जिस खाते का इस्तेमाल करेगा -- वह खाता जिसका इस्तेमाल क्रेडेंशियल के लिए किया जाएगा, उसके पास उन Google Cloud सेवाओं का ऐक्सेस है जिनकी पुष्टि एक्सटेंशन के लिए की जाएगी.

  2. सेवा खाते के लिए कुंजी जनरेट करने के लिए, Google Cloud Console का इस्तेमाल करें.

  3. कॉन्फ़िगरेशन के रेफ़रंस का इस्तेमाल करके, एक्सटेंशन को जोड़ते और कॉन्फ़िगर करते समय, सेवा खाते की कुंजी वाली JSON फ़ाइल का कॉन्टेंट इस्तेमाल करें.

Google Cloud की मदद से पुष्टि करने के बारे में जानकारी

यह एक्सटेंशन, आपके Google Cloud प्रोजेक्ट में तय किए गए किसी सदस्य को दिखाकर, Google Cloud से पुष्टि करने का अनुरोध करता है. इस एक्सटेंशन को कॉन्फ़िगर करते समय, प्रोजेक्ट के उस सदस्य के सेवा खाते की JSON फ़ाइल का इस्तेमाल किया जा सकता है.

इसकी वजह से, इस एक्सटेंशन के पास सिर्फ़ उन संसाधनों का ऐक्सेस होगा जिनके लिए उस सदस्य को अनुमति मिली है. दूसरे शब्दों में, इस एक्सटेंशन की मदद से पुष्टि करने की प्रोसेस, Google Cloud Console में दी गई अनुमतियों और रनटाइम के दौरान एक्सटेंशन (स्कोप या ऑडियंस की मदद से) के अनुरोध किए गए ऐक्सेस के बीच मैच होने पर निर्भर करती है.

आम तौर पर, इस एक्सटेंशन के एपीआई ऐक्सेस के लिए पुष्टि करने का आपका तरीका इस तरह होगा:

  1. पक्का करें कि सदस्य सेवा से जुड़े जिस खाते से यह एक्सटेंशन दिखाया जा रहा है उसके पास Google के उस संसाधन का ऐक्सेस हो जिसे आपको ऐक्सेस करना है. इस एक्सटेंशन में शामिल प्रोजेक्ट के सदस्य को भूमिकाएं देने के लिए, Google Cloud Console में Cloud Identity and Access Management (Cloud IAM) पेज का इस्तेमाल किया जा सकता है.

  2. इस एक्सटेंशन को कॉन्फ़िगर करते समय, उस सदस्य के सेवा खाते की कुंजी JSON का इस्तेमाल करें.

  3. इस एक्सटेंशन का इस्तेमाल करने के लिए एक्सटेंशन कॉलआउट नीति कॉन्फ़िगर करते समय, सिर्फ़ उन संसाधनों के लिए पुष्टि करने का अनुरोध करें जिनका ऐक्सेस आपके प्रोजेक्ट के सदस्य के पास है.

सैंपल

नीचे दिए गए उदाहरणों में, एक्सटेंशन कॉलआउट नीति का इस्तेमाल करके, 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 नीति, ऊपर दी गई एक्सटेंशन कॉलआउट नीति से रिस्पॉन्स वैल्यू को फ़ेच करती है और उसे रिस्पॉन्स पेलोड में कॉपी करती है. यह डीबग करने में मददगार हो सकता है. असल में, हो सकता है कि आप क्लाइंट को टोकन वापस न करना चाहें.

<?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 प्रॉक्सी का यह कोड बताता है कि ServiceCallout नीति के साथ Google Translation 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>
  1. नीचे दी गई lookupकैश नीति, कैश मेमोरी से टोकन पाने की कोशिश करती है. अगर टोकन पहले ही लिया जा चुका है और कैश मेमोरी में सेव किया जा चुका है, तो यह नीति उसे एपीआई प्रॉक्सी की मदद से इस्तेमाल करने के लिए मिलेगी.

      <?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. अगर कैश लुकअप, कैश मेमोरी में सेव किए गए टोकन को वापस नहीं ला पाता है, तो नीचे दी गई एक्सटेंशन कॉलआउट नीति, नया 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>
    
  3. एक्सटेंशन कॉलआउट नीति से नया टोकन फ़ेच करने के बाद, पॉप्युलेट कैश पॉलिसी उसे कैश मेमोरी में सेव करती है, ताकि बाद में एपीआई प्रॉक्सी में मौजूद नीतियों के मुताबिक उसका इस्तेमाल किया जा सके.

      <?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 टोकन की ज़रूरत हो, तब अपने API प्रॉक्सी और Google API के बीच दो पैरों वाले OAuth का इस्तेमाल करने के लिए इस कार्रवाई का इस्तेमाल करें.

दो पैरों वाले OAuth में, यह एक्सटेंशन कार्रवाई किसी सेवा खाते JSON का इस्तेमाल करके Google से पुष्टि करके OAuth टोकन को वापस लाती है (आप उस JSON को, इस एक्सटेंशन को कॉन्फ़िगर करते समय जोड़ते हैं). इस कार्रवाई से OAuth टोकन वापस मिल जाने के बाद, आपका एपीआई प्रॉक्सी, टोकन का इस्तेमाल करके Google API को कॉल कर सकता है. साथ ही, Google सेवा खाते की ओर से एपीआई को असरदार तरीके से कॉल कर सकता है.

Google Cloud API का ऐक्सेस, Google API के लिए 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 API GitHub रिपॉज़िटरी में पब्लिश की गई है, तो Google API से पुष्टि करने के लिए इस टोकन का इस्तेमाल किया जा सकता है.

कुछ Google API में, OAuth 2.0 ऐक्सेस टोकन के बजाय, सीधे कैरियर टोकन के तौर पर साइन किए गए JWT का इस्तेमाल करके, अनुमति वाले एपीआई कॉल किए जा सकते हैं. अगर ऐसा करना मुमकिन है, तो एपीआई कॉल करने से पहले, Google के ऑथराइज़ेशन सर्वर को नेटवर्क अनुरोध करने की ज़रूरत नहीं पड़ती.

JWT ऐक्सेस टोकन की मदद से पुष्टि करने के बारे में ज़्यादा जानने के लिए, सर्वर से सर्वर ऐप्लिकेशन के लिए OAuth 2.0 का इस्तेमाल करना लेख पढ़ें.

सिंटैक्स

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
    "audience" : "audience"
}]]></Input>

उदाहरण: Cloud फ़ंक्शन का यूआरएल

नीचे दिए गए उदाहरण में, एक्सटेंशन की 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 फ़ाइल का पूरा कॉन्टेंट होता है. मैनेजमेंट एपीआई की मदद से भेजने पर, यह base64 कोड में बदली गई वैल्यू होती है. यह सेवा खाते की कुंजी की JSON फ़ाइल से जनरेट होती है. कोई नहीं हां