OAuth ile API'nin güvenliğini sağlama

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

Neler öğreneceksiniz?

  • Örnek bir API proxy'si indirip dağıtın.
  • OAuth korumalı bir API proxy'si oluşturun.
  • Ürün, geliştirici ve uygulama oluşturun.
  • OAuth erişim jetonu için kimlik bilgilerini değiştirin.
  • Erişim jetonu olan bir API'yi çağırın.

Bu eğitimde, OAuth 2.0 ile API güvenliğini nasıl sağlayacağınız gösterilmektedir.

OAuth, uygulamaların sizin adına bilgilere erişmesini sağlayan bir yetkilendirme protokolüdür kullanıcı adlarını ve şifrelerini ifşa etmesine gerek kalmadan).

OAuth ile güvenlik kimlik bilgileri (kullanıcı adı/şifre veya anahtar/gizli gibi) kullanabilirsiniz. Örneğin:

joe:joes_password (kullanıcıadı:şifre) veya
Nf2moHOASMJeUmXVdDhlMbPaXm2U7eMc:unUOXYpPe74ZfLEb (anahtar:gizli)

şuna benzer bir hale gelir:

b0uiYwjRZLEo4lEu7ky2GGxHkanN

Erişim jetonu, rastgele bir karakter dizesidir ve geçicidir ( bir zaman alır), bu nedenle bir uygulama iş akışında kullanıcının kimliğini doğrulamak için kimlik bilgilerini aktarmaktan çok daha güvenlidir.

OAuth 2.0 spesifikasyon, "izin türleri" adı verilen farklı mekanizmaları tanımlar ve erişimi dağıtmanız için jetonlar. OAuth 2.0 tarafından tanımlanan en temel izin türü "istemci" olarak adlandırılır girin." Bu izin türünde, OAuth erişim jetonları istemci yerine Bunlar, yukarıdaki örnekte gösterildiği gibi tüketici anahtarı/tüketici sırrı çiftleridir.

Edge'deki istemci kimlik bilgileri izin türü, API proxy'lerindeki politikalar kullanılarak uygulanır. CEVAP tipik OAuth akışı iki adımdan oluşur:

  • İstemciden OAuth erişim jetonu oluşturmak için API proxy 1'i çağırın kimlik bilgileri. API proxy'sindeki OAuth v2.0 politikası bu işlemi gerçekleştirir.
  • API çağrısında OAuth erişim jetonunu göndermek için API proxy 2'yi çağırın. İlgili içeriği oluşturmak için kullanılan API proxy'si, erişim jetonunu bir OAuth v2.0 politikası kullanarak doğrular.

Gerekenler

  • Bir Apigee Edge hesabı. Henüz hesabınız yoksa talimatlarla kaydolabilirsiniz Apigee Oluşturma Edge hesabı.
  • makinenizde yüklü cURL komut satırından API çağrıları yapma.

Jeton oluşturan API'yi indirip dağıtma proxy

Bu adımda bir web sitesinden OAuth erişim jetonu oluşturan API proxy'sini API çağrısında gönderilen tüketici anahtarı ve tüketici sırrı. Apigee, Google Ads'de bulunan bunu yapar. Proxy'yi şimdi indirip dağıtacaksınız, ardından daha sonra eğiticide kullanacaksınız. ( bu API proxy'sini kendiniz kolayca oluşturabilirsiniz. Bu indirme ve dağıtma adımı kolaylık içindir ve daha önce oluşturulmuş proxy'leri paylaşmanın ne kadar kolay olduğunu göstermek istiyoruz.)

  1. "oauth" dosyasını indirin örnek API proxy'si ZIP dosyasını dosyanızdaki herhangi bir dizine ekleyin bahsedeceğim.
  2. https://apigee.com/edge adresine gidin ve oturum açın.
  3. Geliştir > API Proxy'leri bölümüne gidin.
  4. + Proxy'yi tıklayın.
    Proxy oluştur düğmesi
  5. Proxy Oluştur sihirbazında, Proxy paketi yükle'yi tıklayın.
  6. İndirdiğiniz oauth.zip dosyasını seçin ve İleri'ye dokunun.
  7. Oluştur'u tıklayın.
  8. Derleme tamamlandıktan sonra yeni proxy'yi görüntülemek için Proxy'yi düzenle'yi tıklayın yazması gerekir.
  9. API Proxy düzenleyicisine genel bakış sayfasında Dağıtım açılır menüsünü tıklayın ve test'i seçin. Bu, kuruluşunuzdaki test ortamıdır.
    .
    Onay isteminde Dağıt'ı tıklayın.
    . Dağıtım açılır menüsünü tekrar tıkladığınızda yeşil bir simge proxy'nin dağıtıldığına dikkat edin.

Tebrikler! Erişim jetonu oluşturma API'sini başarıyla indirip dağıttınız proxy ekleyebilirsiniz.

OAuth akışını ve politikasını görüntüleyin

API proxy'sinin neler içerdiğine daha yakından bakalım.

  1. API proxy düzenleyicisinde Geliştir sekmesini tıklayın. Solda Gezinme bölmesinde iki politika görürsünüz. Ayrıca iki POST göreceksiniz Proxy Endpoints bölümündeki akışlar.
  2. Şu giriş altında AccessTokenClientCredential'ı tıklayın: Proxy Endpoints.

    XML kodu görünümünde, Flow AccessTokenClientCredential:

    <Flow name="AccessTokenClientCredential">
        <Description/>
        <Request>
            <Step>
                <Name>GenerateAccessTokenClient</Name>
            </Step>
        </Request>
        <Response/>
        <Condition>(proxy.pathsuffix MatchesPath "/accesstoken") and (request.verb = "POST")</Condition>
    </Flow>
    

    Akış, API proxy'sinde bir işleme adımıdır. Bu durumda akış, belirli bir koşulun karşılanması (koşullu akış olarak adlandırılır). Koşul, şurada tanımlandığı: <Condition> öğesi, API proxy çağrısının /accesstoken kaynağı ve istek fiili POST olduğunda erişimi oluşturan GenerateAccessTokenClient politikasını yürütür. jeton.

  3. Şimdi koşullu akışın tetikleyeceği politikayı inceleyelim. Önce GenerateAccessTokenClient politikası simgesini tıklayın.
    .
    Kod görünümüne aşağıdaki XML yapılandırması yüklenir:

    <OAuthV2 name="GenerateAccessTokenClient">
        <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type -->
        <Operation>GenerateAccessToken</Operation>
        <!-- This is in millseconds, so expire in an hour -->
        <ExpiresIn>3600000</ExpiresIn>
        <SupportedGrantTypes>
            <!-- This part is very important: most real OAuth 2.0 apps will want to use other
             grant types. In this case it is important to NOT include the "client_credentials"
             type because it allows a client to get access to a token with no user authentication -->
            <GrantType>client_credentials</GrantType>
        </SupportedGrantTypes>
        <GrantType>request.queryparam.grant_type</GrantType>
        <GenerateResponse/>
    </OAuthV2>
    

    Yapılandırma şunları içerir:

    • Önceden tanımlanmış birkaç değerden biri olabilecek <Operation>, politikanın ne yapacağını tanımlar. Bu durumda, yeni bir anahtar kelime jeton.
    • Jetonun süresi, oluşturulduktan 1 saat (3600000 milisaniye) sonra dolar.
    • <SupportedGrantTypes> ürününde, OAuth <GrantType> değerinin client_credentials olması bekleniyor (OAuth jetonu karşılığında tüketici anahtarı ve sırrı değişimi).
    • İkinci <GrantType> öğesi, politikaya nereye bakacağını bildirir OAuth 2.0 spesifikasyonunun gerektirdiği şekilde, izin türü parametresi için API çağrısı. (Bunu daha sonra API çağrısında göreceksiniz). İzin türü, HTTP üzerinden de gönderilebilir başlık (request.header.grant_type) veya form parametresi olarak (request.formparam.grant_type).

Şu an için API proxy'si ile başka bir işlem yapmanıza gerek yoktur. Sonraki adımlarda OAuth erişim jetonu oluşturmak için bu API proxy'sini kullanacaksınız. Ama önce birkaç farklı proje yönetimi diğer bilgiler:

  • OAuth ile güvence altına almak istediğiniz API proxy'sini oluşturun.
  • Tüketici anahtarı ve tüketici sırrı yaratacak birkaç yapı daha oluşturun bir erişim jetonu almanız gerekir.
ziyaret edin.

OAuth korumalı API proxy'sini oluşturma

"Sahte hedef" hakkında

Apigee'de barındırılan mocktarget hizmeti basit veriler döndürür. İçinde Hatta bir web tarayıcısından erişebilirsiniz. Aşağıdakileri tıklayarak deneyin:

http://mocktarget.apigee.net/ip

Hedef, bu API proxy'sini çağırdığınızda görmeniz gereken şeyi döndürür.

Ayrıca, geçerli olan diğer API kaynaklarını görmek için http://mocktarget.apigee.net/help mevcut olması gerekir.

Şimdi, korumak istediğiniz API proxy'sini oluşturacaksınız. Bu, her bir kullanıcının istediğiniz bir sonuç döndürür. Bu durumda API proxy'si, Apigee'nin sahte hedef hizmetini çağırır. kullanmanız gerekir. ANCAK bu bilgileri yalnızca geçerli bir OAuth erişimini geçerseniz görürsünüz. jeton.

Burada oluşturduğunuz API proxy'si, isteğinde bulunabilirsiniz.

  1. Geliştir > API Proxy'leri bölümüne gidin.
  2. + Proxy'yi tıklayın.
    Proxy oluştur düğmesi
  3. Bir Proxy Oluştur sihirbazında, Ters proxy (en yaygın) seçeneğini belirleyin, ve İleri'yi tıklayın.
  4. Proxy'yi aşağıdaki şekilde yapılandırın:
    Bu alanda bunu yap
    Proxy Adı Şunu girin: helloworld_oauth2
    Proje Temel Yolu

    Şununla değiştir: /hellooauth2

    Proje Temel Yolu, API'ye istekte bulunmak için kullanılan URL'nin bir parçasıdır temsil eder.

    Mevcut API

    Şunu girin: https://mocktarget.apigee.net/ip

    Bu, Apigee Edge'in API'ye yapılan bir istekte çağırdığı hedef URL'yi tanımlar temsil eder.

    Açıklama Şunu girin: hello world protected by OAuth
  5. İleri'yi tıklayın.
  6. Ortak politikalar sayfasında:
    Bu alanda bunu yap
    Güvenlik: Yetkilendirme Seçin: OAuth 2.0
  7. İleri'yi tıklayın.
  8. Virtual Hosts (Sanal Ana Makineler) sayfasında Next (İleri) seçeneğini tıklayın.
  9. Build (Derleme) sayfasında test ortamının seçili olduğundan emin olun ve Oluştur ve Dağıt'ı tıklayın.
  10. Özet sayfasında, yeni API proxy'nizin ve testinize API proxy'sinin dağıtıldığını bahsedeceğim.
  11. API proxy'sine ilişkin Genel bakış sayfasını görüntülemek için Proxy'yi düzenle seçeneğini tıklayın.
    . Bu kez API proxy'sinin otomatik olarak dağıtıldığına dikkat edin. Dağıtım'ı tıklayın. açılır menüden yeşil bir dağıtım noktasının bulunduğundan emin olun bahsedeceğim.

Politikaları görüntüle

Oluşturduğunuz şeye daha yakından bakalım.

  1. API proxy düzenleyicisinde Geliştir sekmesini tıklayın. Gördüğünüz gibi API proxy'sinin istek akışına politika eklendi:
    • OAuth v2.0 Access Token'ı Doğrula: Veri anahtarının doğru yolda geçerli bir OAuth jetonu olduğundan emin olun.
    • Remove Header Authorization (Üstbilgi Yetkilendirmesini Kaldırma): kontrol edildikten sonra erişim jetonunu kaldırır. Böylece, hedef hizmet. (Hedef hizmet için OAuth erişim jetonu gerekiyorsa bu politikaya tabidir).
  2. Akış görünümünde OAuth v2.0 Erişim Jetonu Doğrula simgesini tıklayın ve kod bölmesinde, altındaki XML'e bakın.

    <OAuthV2 async="false" continueOnError="false" enabled="true" name="verify-oauth-v2-access-token">
        <DisplayName>Verify OAuth v2.0 Access Token</DisplayName>
        <Operation>VerifyAccessToken</Operation>
    </OAuthV2>
    

    <Operation> değerinin VerifyAccessToken olduğuna dikkat edin. İlgili içeriği oluşturmak için kullanılan İşlem, politikanın ne yapması gerektiğini tanımlar. Bu durumda, geçerli bir OAuth jetonu kullanıldığından emin olun.

API ürünü ekleyin

Apigee kullanıcı arayüzünü kullanarak bir API ürünü eklemek için:

  1. Yayınla > API Ürünleri.
  2. +API ürünü'nü tıklayın.
  3. API ürününüzle ilgili Ürün ayrıntıları'nı girin.
    Alan Açıklama
    Ad API ürününün dahili adı. Adda özel karakterler belirtmeyin.
    Not: API ürünü oluşturulduktan sonra adı düzenleyemezsiniz. Örneğin, helloworld_oauth2-Product
    Görünen ad API ürününün görünen adı. Görünen ad, kullanıcı arayüzünde kullanılır ve istediğiniz zaman değiştirebilirsiniz. Belirtilmezse Name (Ad) değeri kullanılır. Bu alan otomatik olarak doldurulur veya "Ad" değerini kullanarak; bu sohbetin içeriğini düzenleyebilir veya silebilirsiniz. Görünen ad şunları içerebilir: kullanabilirsiniz. Örneğin, helloworld_oauth2-Product.
    Açıklama API ürününün açıklaması.
    Ortam API ürününün erişim izni vereceği ortamlar. Hedeflenecek ortamı seçin API proxy'sini dağıttınız. Örneğin, test.
    Erişim Herkese açık'ı seçin.
    Erişim isteklerini otomatik olarak onayla Bu API ürünü için herhangi bir uygulamadan anahtar isteklerin otomatik olarak onaylanmasını etkinleştirin.
    Kota Bu eğitim için yoksayın.
    İzin Verilen OAuth Kapsamları Bu eğitim için yoksayın.
  4. API proxy'leri alanında, az önce oluşturduğunuz API proxy'sini seçin.
  5. Yol alanına "/" yazın. Diğer alanları yoksayın.
  6. Kaydet'i tıklayın.

Profilinize bir geliştirici ve uygulama ekleyin kuruluş

Şimdi, API'lerinizi kullanmak için kaydolan bir geliştiricinin iş akışını simüle edeceksiniz. İdeal olarak, geliştiriciler kendilerini ve uygulamalarını geliştirici portalınız üzerinden kaydeder. Burada adımında, bir geliştirici ve bir uygulamayı yönetici olarak eklemeniz gerekir.

Bir geliştiricinin API'lerinizi çağıran bir veya daha fazla uygulaması olur ve her uygulama benzersiz bir tüketici anahtarı ve tüketici sırrı içerir. Bu anahtar/uygulama başına gizli anahtar, API sağlayıcı olarak size API'lerinize erişim üzerinde daha ayrıntılı kontrol ve API hakkında daha ayrıntılı analiz raporları trafiği gösterir. Çünkü Edge, hangi geliştirici ve uygulamanın hangi OAuth jetonuna ait olduğunu bilir.

Geliştirici oluşturma

Nigel Tufnel adında bir geliştirici oluşturalım.

  1. Yayınla > Geliştiriciler'i seçin.
  2. + Geliştirici'yi tıklayın.
  3. Yeni Geliştirici penceresine aşağıdakileri girin:
    Bu alanda Enter
    Ad Nigel
    Soyadı Tufnel
    Kullanıcı Adı nigel
    E-posta nigel@example.com
  4. Oluştur'u tıklayın.

Uygulama kaydetme

Nigel için bir uygulama oluşturalım.

  1. Yayınla > Uygulamalar'a gidin.
  2. + Uygulama'yı tıklayın.
  3. Yeni Uygulama penceresine aşağıdaki bilgileri girin:
    Bu alanda bunu yap
    Ad ve Görünen Ad Şunu girin: nigel_app
    Developer Geliştirici'yi tıklayın ve Nigel Tufnel (nigel@example.com) seçeneğini belirleyin
    Geri çağırma URL'si ve Notlar Boş bırakın
  4. Ürünler'in altında Ürün Ekle'yi tıklayın.
  5. helloworld_oauth2-Product öğesini seçin.
  6. Oluştur'u tıklayın.

Şunu edinin: tüketici anahtarı ve tüketici sırrı

Bu adımda, OAuth ile değiştirilecek tüketici anahtarını ve tüketici sırrını alacaksınız. erişim jetonu.

  1. nigel_app sayfasının gösterildiğinden emin olun. Değilse, Uygulamalar sayfasında (Yayınla > Uygulamalar) nigel_app'e taşıyın.
  2. nigel_app sayfasındaki Anahtar bölümünden Göster'i tıklayın. ve Gizli anahtar sütunları. Anahtarın/gizli anahtarın "helloworld_oauth2-Product" ile ilişkili otomatik olarak oluşturulmuş anlatacağım.

  3. Anahtarı ve gizli anahtarı seçip kopyalayın. Bunları geçici bir klasöre yapıştırın metin dosyası olarak. Bunları sonraki bir adımda kullanacaksınız. Bu adımda kullanılacak API proxy'si bu kimlik bilgilerini OAuth erişim jetonuyla değiştirin.

IP adresinizi almak için API'yi çağırmayı deneyin (başarısız!)

Tekmeleme için IP'nizi döndürmesi gereken korumalı API proxy'sini çağırmayı deneyin girin. Edge değerini girerek aşağıdaki cURL komutunu bir terminal penceresinde yürütün kuruluş adı. URL'deki test kelimesi size proxy'lerinizi dağıttığınız, kuruluşunuzun test ortamı. Proxy temel yolu /hellooauth2, proxy'yi oluştururken belirttiğiniz temel yol. Şuna dikkat edin: iletmemesi gerekir.

curl https://ORG_NAME-test.apigee.net/hellooauth2

API proxy'sinde OAuth v2.0 Erişim Jetonu Doğrulama politikası bulunduğu için istekte geçerli bir OAuth jetonu olup olmadığını kontrol ediyorsa çağrı aşağıdaki mesaj:

{"fault":{"faultstring":"Invalid access token","detail":{"errorcode":"oauth.v2.InvalidAccessToken"}}}

Bu durumda, başarısızlık iyidir. Bu, API proxy'nizin çok daha güvenli olduğu anlamına gelir. Yalnızca güvenilir geçerli bir OAuth erişim jetonuna sahip uygulamalar bu API'yi başarıyla çağırabilir.

OAuth erişim jetonu alma

Şimdi asıl getiriye geldik. Anahtar ve sırlarınızı kullanmak üzeresiniz kopyalanıp bir metin dosyasına yapıştırılır ve bunları OAuth erişim jetonuyla değiştirin. Şu an içe aktardığınız API örnek proxy'sine (oauth) bir API çağrısı yapacaktır. bir API erişim jetonu oluşturur.

Bu anahtarı ve sırrı kullanarak aşağıdaki cURL çağrısını yapın (protokolün https) kullanarak Edge kuruluş adınızı, anahtarınızı ve şu durumlarda gizlidir:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" \
"https://ORG_NAME-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials" \
-d "client_id=CLIENT_KEY&client_secret=CLIENT_SECRET"

Aramayı yapmak için Postman gibi bir istemci kullanıyorsanız, client_id ve client_secret, x-www-form-urlencoded olmalıdır.

Şuna benzer bir yanıt alırsınız:

{
  "issued_at" : "1466025769306",
  "application_name" : "716bbe61-f14a-4d85-9b56-a62ff8e0d347",
  "scope" : "",
  "status" : "approved",
  "api_product_list" : "[helloworld_oauth2-Product]",
  "expires_in" : "3599", //--in seconds
  "developer.email" : "nigel@example.com",
  "token_type" : "BearerToken",
  "client_id" : "xNnREu1DNGfiwzQZ5HUN8IAUwZSW1GZW",
  "access_token" : "GTPY9VUHCqKVMRB0cHxnmAp0RXc0",
  "organization_name" : "myOrg",
  "refresh_token_expires_in" : "0", //--in seconds
  "refresh_count" : "0"
}

OAuth erişim jetonunuzu aldınız. access_token değerini kopyalayın (tırnak işaretleri olmadan) ve bunu metin dosyanıza yapıştırın. Birazdan kullanacaksınız.

Ne oldu?

Daha önce Google Analytics 4'te koşullu akışa oauth proxy'si, kaynak URI'si /accesstoken ve istek fiili POST şeklindedir. Erişim jetonu oluşturan GenerateAccessTokenClient OAuth politikası mı var? cURL'niz komutu bu koşulları karşıladığı için OAuth politikası yürütüldü. Tüketici anahtarınızı doğruladı ve tüketici sırrı ile bu verileri, 1 saat içinde süresi dolacak bir OAuth jetonu ile değiştirdi.

Erişim jetonuyla API'yi çağırma (başarılı!)

Artık bir erişim jetonunuz olduğuna göre bu jetonu kullanarak API proxy'sini çağırabilirsiniz. Şunu yapın: aşağıdaki cURL çağrısıyla başlar. Edge kuruluş adınızı ve erişim jetonunu değiştirin.

curl https://ORG_NAME-test.apigee.net/hellooauth2 -H "Authorization: Bearer TOKEN"

Şimdi, IP adresinizi döndüren API proxy'sine başarılı bir çağrı göndermeniz gerekir. Örneğin:

{"ip":"::ffff:192.168.14.136"}

Bu API çağrısını yaklaşık bir saat boyunca tekrarlayabilirsiniz. Bu süre geçtikten sonra erişim jetonu sona erecektir. Aramayı bir saat sonra yapmak için adımları uygulayın.

Tebrikler! Bir API proxy'si oluşturdunuz ve bunu geçerli bir Görüşmeye OAuth erişim jetonu dahil edilecek.

İlgili konular