Google Kimlik Doğrulama Uzantısı

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

Sürüm: 1.3.1

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

Google Cloud hizmetleri için bir jeton (OAuth veya JWT) almak için bu uzantıyı kullanın, ardından bu jetonu Google API'ye yapılan sonraki çağrılar için kullanın (ör. bir ServiceDescription politikası kullanarak).

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

Ön koşullar

Bu içerik, bu uzantıyı yapılandırmak ve kullanmak için referans sağlar. ExtensionExtension politikasını kullanarak bir API proxy'sinden uzantıyı kullanmadan önce:

  1. Uzantının kullanacağı hesabın (kimlik bilgileri için kullanacağınız hizmet hesabı tarafından temsil edilen hesabın), uzantının kimlik doğrulaması yapacağı Google Cloud hizmetlerine erişimi olduğundan emin olun.

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

  3. Uzantıyı yapılandırma referansını kullanarak ekleyip yapılandırırken elde edilen 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 isteğinde bulunur. Bu uzantıyı yapılandırırken bu proje üyesinin hizmet hesabı JSON dosyasını kullanırsınız.

Sonuç olarak, bu uzantı yalnızca söz konusu üyenin izni olan kaynaklara erişebilecek. Başka bir deyişle, bu uzantıyla başarılı bir kimlik doğrulama işlemi, Google Cloud Console'da verilen izinler ile çalışma zamanında uzantının talep ettiği erişim (kapsamlar veya kitle aracılığıyla) arasındaki eşleşmeye bağlıdır.

Genel olarak, bu uzantıdan API'lere erişim için kimlik doğrulaması yapmak için izlemeniz gereken adımlar aşağıdaki gibidir:

  1. Bu uzantının temsil ettiği üye hizmet hesabının, erişmek istediğiniz Google kaynağına erişimi olduğundan emin olun. Bu uzantının temsil ettiği proje üyesine rol atamak için Google Cloud Console'da Cloud Identity and Access Management (Cloud IAM) sayfasını kullanabilirsiniz.

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

  3. Bu uzantıyı kullanmak üzere bir ExtensionDescription politikası yapılandırırken yalnızca proje üyenizin erişebildiği kaynaklar için kimlik doğrulama isteyin.

Sana Özel

Aşağıdaki örnekler, ExtensionExtension politikasını kullanarak Google Cloud ile nasıl kimlik doğrulama yapılacağını gösterir.

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 aşağıdaki gibi görünür:

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

Aşağıdaki assignMessage politikası, yukarıdaki Extension callout politikasından yanıt değerini alır ve yanıt yüküne kopyalar. Bu, hata ayıklama için yararlı olabilir. 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 için gereksiz çağrılar yapmaktan kaçınmak için, aldığınız jetonu önbelleğe almayı düşünün. Sonraki jeton gerektiren çağrılar için jetonu Apigee Edge önbelleğinden almak, yeni bir jeton almaktan daha hızlı olacaktır. Önbelleğe alınan jetonun süresi dolduğunda yeni bir jeton alın ve önbelleği bununla 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ış bir jetonun nasıl ayarlanıp kullanılacağını gösterir. Buradaki her kod örneği, akıştaki farklı bir politikaya yöneliktir.

Aşağıdaki politikalar, aşağıdaki akış XML'inde açıklanan sırada 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 ExtensionExtension politikası, jetonun kapsamı olarak Google Cloud Translation API'yi belirterek 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. ExtensionDescription 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

Bir OAuth 2.0 erişim jetonu alır. Google API'leri için OAuth jetonu gerektiğinde API proxy'niz ve Google API'leri arasındaki 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'u (bu uzantıyı yapılandırırken siz eklersiniz) Google ile kimlik doğrulayarak bir OAuth jetonu alır. Bu işlem OAuth jetonunu aldıktan sonra API proxy'niz, jetonu kullanarak Google API'lerine çağrı yapabilir ve API'leri Google hizmet hesabı adına etkili bir şekilde çağırabilir.

Google Cloud API'lerine erişim, Google API'leri için OAuth 2.0 kapsamları bölümünde listelenen kapsamlar kullanılarak filtrelenir.

OAuth 2.0 ile sunucular arası etkileşimler hakkında daha fazla bilgi edinmek için Sunucudan Sunucuya Uygulamalar için OAuth 2.0'ı Kullanma konusuna 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 Gerekli
kapsam Bir dizi OAuth 2.0 kapsamları. Kapsamlar hakkında daha fazla bilgiyi Google API'leri için OAuth 2.0 kapsamları bölümünde bulabilirsiniz. Dizi ["https://www.googleapis.com/auth/cloud-platform"]: Hizmet hesabının erişebildiği tüm API'lere erişim izni verir. Hayır

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 Gerekli
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ı. 3.600 Evet

getJWTAccessToken

Bir JSON web jetonu (JWT) erişim jetonu alır. Çağırmak 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 doğrudan hamiline ait jeton olarak imzalanmış bir JWT kullanarak yetkili API çağrıları yapabilirsiniz. Bu mümkün olduğunda, API çağrısı yapmadan önce Google'ın yetkilendirme sunucusuna bir ağ isteği göndermekten kaçınabilirsiniz.

JWT erişim jetonuyla kimlik doğrulama hakkında daha fazla bilgi 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ği sağlanmış 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 Gerekli
audience Jetonun hedeflenen alıcısı. Bu değer, güvenliği Cloud IAP ile sağlanmış bir istemci kimliği, Cloud Functions URL'si vb. içerebilir. Yok Evet

Yanıt

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

Yanıt özellikleri

Parametre Açıklama Varsayılan Gerekli
accessToken Erişim jetonu. Yok Evet
tokenType Jeton türü. Taşıyıcı Evet
expiresInSec Süresi, saniyeler içinde dolacak. 3.600 Evet

Yapılandırma referansı

Bu uzantıyı API proxy'lerinde kullanmak üzere yapılandırırken ve 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 bölümüne 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 özgü aşağıdaki yapılandırma özellikleri için değerler belirtin.

Özellik Açıklama Varsayılan Gerekli
giriş bilgileri Apigee Edge konsoluna girdiğinizde, hizmet hesabı anahtarı JSON dosyanızın tüm içeriği budur. Yönetim API'si aracılığıyla gönderildiğinde, tüm hizmet hesabı anahtarı JSON dosyasından oluşturulan base64 olarak kodlanmış bir değerdir. Yok Evet