Google Kimlik Doğrulama Uzantısı

Apigee Edge belgelerini görüntülüyorsunuz.
. Git: Apigee X belgeleri.
bilgi

Sürüm: 1.0.2

Belirttiğiniz Google API'lerine erişim için Google ile kimlik doğrulayın.

Google Cloud hizmetleri için bir jeton (OAuth veya JWT) almak için bu uzantıyı kullanın. Ardından, ServiceReference politikası gibi yollarla Google API'ye yapılacak sonraki çağrılarda da bu jetonu kullanın.

Örneğin, bir API proxy'sinde bu uzantıya sahip bir jeton alabilir, PopulateCache politikasını kullanarak jetonu önbelleğe alabilir, ardından Google Cloud hizmetlerine bir API proxy akışı içinden erişmek için jetonu ServiceReference politikası aracılığıyla iletebilirsiniz.

Ön koşullar

Bu içerik, bu uzantının yapılandırılması ve kullanılması için referans sağlamaktadır. ExtensionCall politikası ile uzantıyı bir API proxy'sinden kullanmadan önce şunları yapmanız gerekir:

  1. Uzantının kullanacağı hesabın (kimlik bilgileri için kullanacağınız hizmet hesabının temsil ettiği hesap), uzantının kimliğini doğrulayan Google Cloud hizmetlerine erişebildiğinden emin olun.

  2. Google Cloud Console'u kullanarak hizmet hesabı için bir anahtar oluşturun.

  3. Yapılandırma referansını kullanarak uzantıyı ekleyip yapılandırırken sonuçta ortaya çıkan hizmet hesabı anahtarı JSON dosyasının içeriğini kullanın.

Google Cloud ile kimlik doğrulama hakkında

Bu uzantı, Google Cloud projenizde tanımlı belirli bir üyeyi temsil ederek Google Cloud'dan kimlik doğrulama ister. Bu uzantıyı yapılandırırken ilgili proje üyesinin hizmet hesabı JSON dosyasını kullanırsınız.

Sonuç olarak, bu uzantı yalnızca ilgili üyenin izne sahip olduğu kaynaklara erişebilecek. Başka bir deyişle, bu uzantıyla başarılı kimlik doğrulama, Google Cloud Console'da verilen izinler ile uzantı tarafından çalışma zamanında istenen erişim (kapsamlar veya kitle üzerinden) arasındaki eşleşmeye bağlıdır.

Genel olarak, bu uzantıdan API'lere erişim için kimlik doğrulaması yaparken izleyeceğiniz adımlar aşağıdaki gibi olacaktır:

  1. Bu uzantının temsil ettiği üye hizmet hesabının, erişmek istediğiniz Google kaynağına erişebildiğinden emin olun. Bu uzantının temsil ettiği proje üyesine roller vermek için Google Cloud Console'daki Cloud Identity and Access Management (Cloud IAM) sayfasını kullanabilirsiniz.

  2. Bu uzantıyı yapılandırırken üyenin hizmet hesabı anahtarı JSON dosyasını kullanın.

  3. Bu uzantıyı kullanacak şekilde bir ExtensionCall politikası yapılandırırken yalnızca proje üyenizin erişiminin olduğu kaynaklar için kimlik doğrulama isteyin.

Örnekler

Aşağıdaki örneklerde, ExtensionDescription politikası kullanılarak Google Cloud ile kimlik doğrulamanın nasıl yapılacağı gösterilmektedir.

Erişim jetonu alma

Aşağıdaki örnekte uzantının getOauth2AccessToken işlemi Cloud Translation API'ye yapılan isteklerde kullanılacak bir jeton alır.

<?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>

Yanıt değeri şöyle görünür:

{
  "access_token":"ya29.c.ElpSB...BMgkALBJ0kou-8",
  "token_type":"Bearer",
  "expiresInSec": 3600
}

Aşağıdaki AssignmentMessage politikası, yukarıdaki ExtensionDescription politikasından yanıt değerini alır ve yanıt yüküne kopyalar. Bu işlem, hata ayıklama sırasında faydalı olabilir. Asıl pratikte, jetonu müşteriye geri vermek istemeyebilirsiniz.

<?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>

Erişim jetonunu önbelleğe alma

Jeton almak üzere gereksiz çağrılar yapmaktan kaçınmak için aldığınız jetonu önbelleğe almayı düşünebilirsiniz. Jeton gerektiren sonraki çağrılarda, jetonu Apigee Edge önbelleğinden almak yeni bir jeton almaya göre daha hızlı olacaktır. Önbelleğe alınan jetonun süresi dolduğunda, yeni bir jeton alın ve bu jetonla önbelleği yenileyin.

Örnek bir API proxy'sinden alınan aşağıdaki kod, Google Translation API'yi bir ServiceCallout politikasıyla çağırmak için önbelleğe alınmış jetonun nasıl ayarlanacağını ve kullanılacağını göstermektedir. Buradaki her kod örneği, akıştaki farklı bir politikaya yöneliktir.

Aşağıdaki politikalar, şu akış XML'inde açıklanan sırayla yürütülür:

  <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. Aşağıdaki LookupCache politikası, önbellekten jeton almaya çalışır. Jeton önceden alınmış ve önbelleğe alınmışsa bu politika, jetonu API proxy'si tarafından kullanılmak üzere alır.

      <?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. Önbellek araması önbelleğe alınan bir jetonu almazsa aşağıdaki ExtensionDescription politikası, jetonun kapsamı olarak Google Cloud Translation API'yi belirten yeni bir OAuth jetonu alır. Google-Auth-Callout uzantısını yapılandırırken kullanılan hizmet hesabı kimlik bilgileri API'ye erişimi olan bir proje üyesini temsil ediyorsa Google Cloud geçerli bir jeton döndürür.

      <?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. ExtensionÇağrı politikası yeni bir jeton aldıktan sonra, PopulateCache politikası bu jetonu daha sonra API proxy'sindeki politikalar tarafından kullanılmak üzere önbelleğe alır.

      <?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>
    

İşlemler

getOauth2AccessToken

OAuth 2.0 erişim jetonu alır. Google API'leri OAuth jetonu gerektirdiğinde API proxy'niz ve Google API'leri arasında iki aşamalı OAuth'u desteklemek için bu işlemi kullanın.

İki aşamalı OAuth'ta bu uzantı işlemi, bir hizmet hesabı JSON'ı kullanarak Google ile kimlik doğrulayarak bir OAuth jetonu alır (bu uzantıyı yapılandırdığınızda JSON'u eklersiniz). Bu işlem OAuth jetonunu aldıktan sonra, API proxy'niz bu jetonu kullanarak Google API'lerine çağrı yapabilir ve Google hizmet hesabı adına API'leri etkili bir şekilde çağırabilir.

Google Cloud API'lerine erişim, Google API'leri için OAuth 2.0 kapsamlarında listelenen kapsamlar aracılığıyla filtrelenir.

OAuth 2.0 ile sunucudan sunucuya etkileşimler hakkında daha fazla bilgi edinmek için Sunucudan Sunucuya Uygulamalar için OAuth 2.0'ı Kullanma başlıklı makaleye bakın.

Söz dizimi

<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
  "scope" : [
    "scope1",
    "scope2"
  ]
}]]></Input>

Örnek

Aşağıdaki örnekte uzantının getOauth2AccessToken işlemi Cloud Translation API'ye yapılan isteklerde kullanılacak bir jeton alır.

<Action>getOauth2AccessToken</Action>
<Input><![CDATA[{
    "scope" : [
      "https://www.googleapis.com/auth/cloud-translation"
  ]
}]]></Input>

İstek parametreleri

Parametre Açıklama Tür Varsayılan Zorunlu
kapsam OAuth 2.0 kapsamları dizisi. Kapsamlar hakkında daha fazla bilgi edinmek için Google API'leri için OAuth 2.0 kapsamları başlıklı makaleye bakın. Dizi ["https://www.googleapis.com/auth/cloud-platform"], hizmet hesabının erişebildiği tüm API'lere erişim izni verir. Sıra

Yanıt

Erişim jetonunu, türünü ve son kullanma tarihini aşağıdaki biçimde içeren bir nesne:

{
  "accessToken": "ewogICJ0eXB...C5jb20iCn0K",
  "token_type": "Bearer",
  "expiresInSec": 3600
}

Yanıt özellikleri

Parametre Açıklama Varsayılan Zorunlu
accessToken OAuth 2.0 erişim jetonu. Yok Evet
tokenType Jeton türü. Taşıyıcı Evet
expiresInSec Jetonun süresinin dolmasına kalan saniye sayısı. 3600 Evet

getJWTAccessToken

JSON web jetonu (JWT) erişim jetonu alır. Çağrık istediğiniz API'nin Google API'leri GitHub deposunda yayınlanmış bir hizmet tanımı varsa Google API'leriyle kimlik doğrulamak için bu jetonu kullanabilirsiniz.

Bazı Google API'lerinde, OAuth 2.0 erişim jetonu yerine hamiline ait jeton olarak doğrudan imzalı bir JWT kullanarak yetkili API çağrıları yapabilirsiniz. Bu mümkün olduğunda, bir API çağrısı yapmadan önce Google'ın yetkilendirme sunucusuna bir ağ isteğinde bulunmak zorunda kalmazsınız.

JWT erişim jetonuyla kimlik doğrulama hakkında daha fazla bilgi edinmek için Sunucudan Sunucuya Uygulamalar için OAuth 2.0 Kullanma başlıklı makaleye bakın.

Söz dizimi

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

Örnek: Cloud Functions işlevi URL'si

Aşağıdaki örnekte uzantının getOauth2AccessToken işlemi Cloud Translation API'ye yapılan isteklerde kullanılacak bir jeton alır.

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

Örnek: Cloud IAP güvenli istemci kimliği

Aşağıdaki örnekte uzantının getOauth2AccessToken işlemi Cloud Translation API'ye yapılan isteklerde kullanılacak bir jeton alır.

<Action>getJWTAccessToken</Action>
<Input><![CDATA[{
  "audience" : "Cloud-IAP-secured-client-ID"
}]]></Input>

İstek parametreleri

Parametre Açıklama Varsayılan Zorunlu
audience Jetonun hedeflenen alıcısı. Buna Cloud IAP güvenli istemci kimliği, Cloud Functions URL'si ve benzeri öğeler dahildir. Yok Evet

Yanıt

{
  "accessToken": "token",
  "tokenType": "Bearer",
  "expiresInSec": 3600
}

Yanıt özellikleri

Parametre Açıklama Varsayılan Zorunlu
accessToken Erişim jetonu. Yok Evet
tokenType Jeton türü. Taşıyıcı Evet
expiresInSec Süresi saniye içinde dolacaktır. 3600 Evet

Yapılandırma referansı

Bu uzantıyı API proxy'lerinde kullanmak üzere yapılandırıp dağıtırken aşağıdakileri kullanın. Apigee konsolunu kullanarak uzantı yapılandırma adımları için Uzantı ekleme ve yapılandırma'ya bakın.

Sık kullanılan uzantı özellikleri

Aşağıdaki özellikler her uzantı için mevcuttur.

Mülk Açıklama Varsayılan Zorunlu
name Uzantının bu yapılandırmasını verdiğiniz ad. Yok Evet
packageName Apigee Edge'in sağladığı uzantı paketinin adı. Yok Evet
version Uzantıyı yapılandırdığınız uzantı paketinin sürüm numarası. Yok Evet
configuration Eklediğiniz uzantıya özgü yapılandırma değeri. Bu uzantı paketinin özellikleri başlıklı makaleyi inceleyin Yok Evet

Bu uzantı paketinin özellikleri

Bu uzantıya özel aşağıdaki yapılandırma özelliklerinin değerlerini belirtin.

Özellik Açıklama Varsayılan Zorunlu
giriş bilgileri Apigee Edge konsoluna girildiğinde hizmet hesabı anahtarı JSON dosyanızın içeriğinin tamamı bu şekildedir. Yönetim API'si aracılığıyla gönderildiğinde, hizmet hesabı anahtarı JSON dosyasının tamamından oluşturulan base64 kodlu bir değerdir. Yok Evet