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

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

वर्शन: 1.3.1

आपने 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&quo>t<; standalone="yes"?
AssignMessage async="false" continueOnError="fal>se&qu<ot; enabled>="true" n<ame="Re>triev<e-Auth-Token"
    DisplayNameRetrieve >Auth <Tok>en/Displa<yName
    AssignTo type="response>" createNew="false"<;/
    S>et
  <    > < Payload conte>ntType="application/json"{google.credentials.access_token}/Payload
    /Set
/AssignMessage

ऐक्सेस टोकन को कैश मेमोरी में सेव करना

टोकन पाने के लिए बार-बार कॉल करने से बचने के लिए, मिले हुए टोकन को कैश मेमोरी में सेव करें. इसके बाद, जिन कॉल के लिए टोकन की ज़रूरत होती है उनके लिए, Apigee Edge कैश से टोकन को फिर से पाना, नया टोकन पाने की तुलना में ज़्यादा तेज़ होगा. कैश किए गए टोकन की समयसीमा खत्म होने पर, नया टोकन पाएं और उससे कैश मेमोरी को रीफ़्रेश करें.

यहां एक एपीआई प्रॉक्सी का कोड दिया गया है. इससे पता चलता है कि ServiceCallout नीति के साथ Google Translate 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
    <    >NameGoogle-Auth-Cal<lout/>Name
    <    Conditionlookupcache.Get-Cached-Auth-Token.cachehit is f<alse/Condi>tion
<    />Step
<    !-- Only execute the following PopulateCache policy if the call to the
      cache couldn't retrieve a cached t>oken.< --
>    Step
<    >    NameCache-Au<th-To>ken/Name
<        C>onditionlookupcache.Get-Cached-Auth-Token.cachehit <is false/C>ondit<ion
 >   /S<tep
    !-- Use the ServiceCallout policy to call the translate> API.< --
>    Step
<    >    NameTransl<ate-T>ext/N<ame
 > <  /Step
/Request
  1. यहां दी गई LookupCache नीति, कैश मेमोरी से टोकन पाने की कोशिश करती है. अगर टोकन पहले ही मिल चुका है और उसे कैश मेमोरी में सेव कर लिया गया है, तो यह नीति उसे एपीआई प्रॉक्सी के इस्तेमाल के लिए उपलब्ध कराएगी.

      <?xml version="1.0" encoding="UTF-8&quo>t; <standalone="yes"?
      LookupCache async="false" continueOnError="false>" <enabled=&qu>ot;true" name=&q<uot;Get-Cach>ed-Auth<-Token"
          DisplayNameGet Cached Auth Token/DisplayName
          !-- >Give ca<che key >and scope t<o speci>fy the entr<y for the c>ached token. --
        <  CacheKey
     >       <  >Prefix/
          <    <>/span>KeyFragmen<tgcp_t>ranslat<e_token_/KeyFragment
          /CacheKey
          ScopeExclusive/Scope
          !-- Assign the retrieved token (i>f any) <to a var>iable, where it
           can b<e retriev>ed <by policies.> --
          AssignTocloud.translation.auth.token/AssignTo
      /LookupCache
    
  2. अगर कैश मेमोरी में खोज करने पर, कैश किया गया टोकन नहीं मिलता है, तो ExtensionCallout नीति, नया OAuth टोकन वापस लाती है. इसमें Google Cloud Translation API को टोकन के स्कोप के तौर पर तय किया जाता है. अगर Google-Auth-Callout एक्सटेंशन को कॉन्फ़िगर करते समय इस्तेमाल किए गए सेवा खाते के क्रेडेंशियल, ऐसे प्रोजेक्ट मेंबर के हैं जिसके पास एपीआई का ऐक्सेस है, तो Google Cloud एक मान्य टोकन दिखाता है.

      <?xml version="1.0" encoding="UTF-8&quo>t; <standalone="yes"?
      ConnectorCallout async="false" continueOnError="tr>ue"<; enabled=&>quot;true" nam<e="Goog>le-Auth<-Callout&>quot;
          DisplayNam<eGoogle-Au>th-Call<out/Di>splayName
          Conn<ectorex>ample-a<uth-e><xtension/Connector
          ActiongetOauth2AccessToken/Action
          Input![CDATA[{
            &qu><ot;sco>pe"<; : ["https://ww>w.googleapis.com/auth/cloud-<transla>tio<n"]
          }]>]/Input
          Output parsed="false"cloud.translation.auth.token/Output
      /ConnectorCallout
    
  3. ExtensionCallout नीति के नए टोकन को वापस पाने के बाद, PopulateCache नीति उसे कैश मेमोरी में सेव करती है. इससे एपीआई प्रॉक्सी में मौजूद नीतियां बाद में उसका इस्तेमाल कर पाती हैं.

      <?xml version="1.0" encoding="UTF-8&quo>t; <standalone="yes"?
      PopulateCache async="false" continueOnError=">false&q<uot; enable>d="true&quo<t; name=&quo>t;Cache<-Auth-Token>"
    <      DisplayNameCache Auth Token/DisplayName
          Properties/
          !->- Set c<ache key> informatio<n to sp>ecify a uni<que key for> this entry. --
        <  CacheKey
     >       <  >Prefix/
          <    <>/span>KeyFragmen<tgcp_t>ranslat<e_token_/KeyFr>agment
        <  /Ca>cheKey
     <     S>copeExclusive/<Scope
          Exp>irySett<ings
              TimeoutInSec5/TimeoutInSec
          /ExpirySettings
          !-- Get the >token t<o cach>e from the variable where th<e Exten>sio<nCallout put i>t. --
          Sourcecloud.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",
><    &q>uot;scope2"
  ]
}]]/Input

उदाहरण

इस उदाहरण में, एक्सटेंशन का getOauth2AccessToken ऐक्शन, Cloud Translation API को किए जाने वाले अनुरोधों में इस्तेमाल करने के लिए एक टोकन वापस लाता है.

<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
    "scope" : [
      "https://www.googleapis.com/auth/cloud-trans><lation>&quot;
  ]
}]]/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 के साथ पुष्टि करने के लिए किया जा सकता है. हालांकि, ऐसा सिर्फ़ तब किया जा सकता है, जब आपको जिस एपीआई को कॉल करना है उसकी सेवा की परिभाषा, Google API के GitHub डेटाबेस में पब्लिश की गई हो.

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

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

सिंटैक्स

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
    "audience" : &quo><t;audi>ence"
}]]/Input

उदाहरण: Cloud Function का यूआरएल

इस उदाहरण में, एक्सटेंशन का getOauth2AccessToken ऐक्शन, Cloud Translation API को किए जाने वाले अनुरोधों में इस्तेमाल करने के लिए एक टोकन वापस लाता है.

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "https://YOUR_REGION-YOUR_PROJECT_ID.cloudfunctions.net/FUN><CTION_>NAME"
}]]/Input

उदाहरण: Cloud IAP से सुरक्षित किया गया क्लाइंट आईडी

इस उदाहरण में, एक्सटेंशन का getOauth2AccessToken ऐक्शन, Cloud Translation API को किए जाने वाले अनुरोधों में इस्तेमाल करने के लिए एक टोकन वापस लाता है.

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "Cloud-IAP-secured><-clien>t-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 वैल्यू होता है. कोई नहीं हां