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

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

वर्शन: 1.3.2

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

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

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

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

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