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

Apigee Edge का दस्तावेज़ देखा जा रहा है.
Apigee X के दस्तावेज़ पर जाएं.
जानकारी

वर्शन: 2.0.0

आपने जिन Google API का ऐक्सेस मांगा है उनके लिए, Google से पुष्टि करें.

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

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

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

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

  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. इस एक्सटेंशन का इस्तेमाल करने के लिए, 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 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. यहां दी गई 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>
    
  2. अगर कैश मेमोरी में मौजूद टोकन नहीं मिलता है, तो 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>
    
  3. 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 का इस्तेमाल करें.

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

Google के कुछ एपीआई के साथ, 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 console का इस्तेमाल करके एक्सटेंशन को कॉन्फ़िगर करने का तरीका जानने के लिए, एक्सटेंशन जोड़ना और कॉन्फ़िगर करना लेख पढ़ें.

सामान्य एक्सटेंशन प्रॉपर्टी

हर प्रॉपर्टी के लिए नीचे दी गई प्रॉपर्टी मौजूद हैं.

प्रॉपर्टी जानकारी डिफ़ॉल्ट ज़रूरी है
name वह नाम, जिसे आप एक्सटेंशन का यह कॉन्फ़िगरेशन दे रहे हैं. कभी नहीं हां
packageName एक्सटेंशन पैकेज का नाम, जो Apigee Edge से दिया गया है. कभी नहीं हां
version उस एक्सटेंशन पैकेज का वर्शन नंबर जिससे आपको एक्सटेंशन कॉन्फ़िगर करना है. कभी नहीं हां
configuration आप जिस एक्सटेंशन को जोड़ रहे हैं उसके लिए खास तौर पर कॉन्फ़िगरेशन वैल्यू. इस एक्सटेंशन पैकेज के लिए प्रॉपर्टी देखें कभी नहीं हां

इस एक्सटेंशन पैकेज के लिए प्रॉपर्टी

इस एक्सटेंशन के लिए, यहां दी गई कॉन्फ़िगरेशन प्रॉपर्टी की वैल्यू दें.

प्रॉपर्टी ब्यौरा डिफ़ॉल्ट ज़रूरी है
क्रेडेंशियल Apigee Edge कंसोल में डालने पर, यह आपके सेवा खाते की कुंजी की JSON फ़ाइल का पूरा कॉन्टेंट होता है. मैनेजमेंट एपीआई के ज़रिए भेजे जाने पर, यह सेवा खाते की कुंजी की पूरी JSON फ़ाइल से जनरेट की गई, base64-कोड में बदली गई वैल्यू होती है. कोई नहीं हां