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

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

वर्शन: 1.0.2

तय किए गए Google API के ऐक्सेस के लिए Google से पुष्टि करें.

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

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

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

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

  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 और ऐक्सेस मैनेजमेंट (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
}

नीचे दी गई AssignmentMessage नीति, ऊपर दी गई एक्सटेंशन कॉलआउट नीति से रिस्पॉन्स वैल्यू हासिल करती है और उसे रिस्पॉन्स पेलोड में कॉपी करती है. डीबग करने में यह काम आ सकता है. असल में, हो सकता है कि आप क्लाइंट को टोकन वापस न करना चाहें.

<?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 नीति के साथ कॉल किया जा सकता है. यहां उदाहरण के तौर पर दिया गया हर कोड, फ़्लो की अलग-अलग नीति के बारे में है.

इन नीतियों को नीचे दिए गए फ़्लो एक्सएमएल में बताए गए क्रम के मुताबिक लागू किया जाता है:

  <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. एक्सटेंशन कॉलआउट की नीति से नया टोकन मिलने के बाद, 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 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>

अनुरोध के पैरामीटर

पैरामीटर ब्यौरा Type डिफ़ॉल्ट ज़रूरी है
दायरा 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>

अनुरोध के पैरामीटर

पैरामीटर ब्यौरा डिफ़ॉल्ट ज़रूरी है
audience टोकन पाने वाला व्यक्ति. इसमें 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 फ़ाइल से जनरेट किया जाता है. कभी नहीं हां