İstemci kimlik bilgileri izin türünü uygulama

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

Müşteri kimlik bilgileri atama türünde, bir uygulama kendi kimlik bilgilerini (istemci kimliği ve istemci gizli anahtarı) Apigee Edge'de erişim jetonu oluşturmak için ayarlanmış bir uç noktaya gönderir. Kimlik bilgileri geçerliyse Edge, istemci uygulamasına bir erişim jetonu döndürür.

Bu konu hakkında

Bu konuda, OAuth 2.0 istemci kimlik bilgisi verme türü hakkında genel bir açıklama sunulmakta ve bu akışın Apigee Edge'de nasıl uygulanacağı ele alınmaktadır.

Kullanım alanları

Bu izin türü en çok, uygulamanın kaynak sahibi olduğu durumlarda kullanılır. Örneğin, bir uygulamanın, son kullanıcıya ait veriler yerine işini yapmak için kullandığı verileri depolamak ve almak üzere bulut tabanlı bir arka uç depolama hizmetine erişmesi gerekebilir. Bu izin türü akışı, yalnızca bir istemci uygulaması ile yetkilendirme sunucusu arasında gerçekleşir. Bir son kullanıcı bu izin türü akışına katılmıyorsa

Roller

Roller, OAuth akışına katılan "aktörleri" belirtir. Apigee Edge'in nerede yer aldığını göstermek için istemci kimlik bilgisi rollerine hızlıca göz atalım. OAuth 2.0 rolleriyle ilgili eksiksiz bir tartışma için IETF OAuth 2.0 spesifikasyonuna bakın.

  • İstemci Uygulaması: Kullanıcının korumalı kaynaklarına erişmesi gereken uygulama. Genellikle bu akışta uygulama, kullanıcının dizüstü bilgisayarında veya cihazında yerel olarak değil, sunucuda çalışır.
  • Apigee Edge: Bu akışta Apigee Edge, OAuth yetkilendirme sunucusudur. Rolü, erişim jetonları oluşturmak, erişim jetonlarını doğrulamak ve korumalı kaynaklara yönelik yetkilendirilmiş istekleri kaynak sunucusuna iletmektir.
  • Kaynak Sunucu: İstemci uygulamasının erişmek için izne ihtiyacı olan, korunan verileri depolayan arka uç hizmeti. Apigee Edge'de barındırılan API proxy'lerini koruyorsanız Apigee Edge aynı zamanda kaynak sunucusudur.

Kod örneği

GitHub'da müşteri kimlik bilgileri atama türünün eksiksiz ve çalışan bir örnek uygulamasını bulabilirsiniz. Daha fazla örnek bağlantısı için aşağıdaki Ek kaynaklar bölümüne bakın.

Akış şeması

Aşağıdaki akış şeması, yetkilendirme sunucusu olarak Apigee Edge'in kullanıldığı istemci kimlik bilgileri akışını göstermektedir. Genel olarak, bu akışta Edge de kaynak sunucusudur. Yani API proxy'leri korunan kaynaklardır.


İstemci kimlik bilgileri akışındaki adımlar

Apigee Edge'in yetkilendirme sunucusu olarak kullanıldığı istemci kimlik bilgileri kod izni türünü uygulamak için gereken adımların özeti aşağıda verilmiştir. Bu akışta istemci uygulamasının yalnızca istemci kimliğini ve istemci gizli anahtarını sunduğunu, bunların geçerli olması durumunda ise Apigee Edge'in erişim jetonu döndürdüğünü unutmayın.

Ön koşul: İstemci kimliği ve istemci sırrı anahtarlarını almak için istemci uygulaması Apigee Edge'e kaydedilmelidir. Ayrıntılar için İstemci uygulamalarını kaydetme başlıklı makaleyi inceleyin.

1. İstemci, erişim jetonu ister

İstemci, erişim jetonu almak için kayıtlı bir geliştirici uygulamasından alınan istemci kimliği ve istemci gizli anahtarı değerleriyle Edge'e bir API çağrısı POST eder. Ayrıca, grant_type=client_credentials parametresi sorgu parametresi olarak iletilmelidir. (Ancak, OAuthV2 politikasını bu parametreyi istek başlığında veya gövdesinde kabul edecek şekilde yapılandırabilirsiniz. Ayrıntılar için OAuthV2 politikası bölümüne bakın.)

Örneğin:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST 'https://docs-test.apigee.net/oauth/accesstoken' -d 'grant_type=client_credentials&client_id=ns4fQc14Zg4hKFCNaSzArVuwszX95X&client_secret=ZIjFyTsNgQNyxI'

Not: client_id ve client_secret değerlerini yukarıda gösterildiği gibi sorgu parametreleri olarak iletebilseniz de bunları Authorization başlığında base64 URL kodlamalı bir dize olarak iletmek iyi bir uygulamadır. Bunu yapmak için iki değeri, aralarına iki nokta üst üste işareti koyarak birlikte kodlamak üzere bir Base64 kodlama aracı veya yardımcı programı kullanmanız gerekir. Şu şekilde: aBase64EncodeFunction(clientidvalue:clientsecret). Bu nedenle, yukarıdaki örnek şu şekilde kodlanır:

result = aBase64EncodeFunction(ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI) // İki değeri ayıran iki nokta üst üste işaretine dikkat edin.

Yukarıdaki dizenin Base64 kodlamasının sonucu: bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==

Ardından, jeton isteğini şu şekilde yapın:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST 'https://docs-test.apigee.net/oauth/accesstoken' -d 'grant_type=client_credentials' -H 'Authorization: Basic bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg=='

2. Edge, kimlik bilgilerini doğrular.

API çağrısının /accesstoken uç noktasına gönderildiğini unutmayın. Bu uç noktaya, uygulamanın kimlik bilgilerini doğrulayan bir politika eklenmiştir. Yani politika, gönderilen anahtarları, uygulama kaydedildiğinde Apigee Edge'in oluşturduğu anahtarlarla karşılaştırır. Edge'deki OAuth uç noktaları hakkında daha fazla bilgi edinmek istiyorsanız OAuth uç noktalarını ve politikalarını yapılandırma başlıklı makaleyi inceleyin.

3. Edge yanıt döndürür

Kimlik bilgileri doğruysa Edge, istemciye bir erişim jetonu döndürür. Aksi takdirde hata döndürülür.

4. İstemci, korumalı API'yi çağırır.

Artık istemci, geçerli bir erişim jetonuyla korumalı API'ye çağrı yapabilir. Bu senaryoda, Apigee Edge'e (proxy) istekler gönderilir ve Edge, API çağrısını hedef kaynak sunucusuna iletmeden önce erişim jetonunu doğrulamaktan sorumludur. Örnek için aşağıdaki Korunan API'yi çağırma bölümüne bakın.

Akışları ve politikaları yapılandırma

Edge, yetkilendirme sunucusu olarak erişim jetonları için yapılan istekleri işler. API geliştiricisi olarak, jeton isteklerini işlemek için özel akışa sahip bir proxy oluşturmanız, OAuthV2 politikası ekleyip yapılandırmanız gerekir. Bu bölümde, söz konusu uç noktanın nasıl yapılandırılacağı açıklanmaktadır.

Özel akış yapılandırması

API proxy akışının nasıl yapılandırıldığını göstermenin en kolay yolu, XML akış tanımını göstermektir. Erişim jetonu isteğini işlemek için tasarlanmış örnek bir API proxy akışını burada bulabilirsiniz. Örneğin, bir istek geldiğinde ve yol soneki /accesstoken ile eşleştiğinde GetAccessToken politikası tetiklenir. Bunun gibi özel bir akış oluşturmak için gereken adımlara hızlı bir genel bakış için OAuth uç noktalarını ve politikalarını yapılandırma başlıklı makaleye bakın.

<Flows>
  <Flow name="GetAccessToken">
         <!-- This policy flow is triggered when the URI path suffix
         matches /oauth/accesstoken. Publish this URL to app developers 
         to use when obtaining an access token using an auth code   
         -->
    <Condition>proxy.pathsuffix == "/oauth/accesstoken"</Condition>
    <Request>
        <Step><Name>GetAccessToken</Name></Step>
    </Request>
  </Flow>
</Flows>

Akışı bir politikayla yapılandırma

Aşağıdaki şekilde uç noktaya bir politika eklemeniz gerekir. OAuthV2 politikasını proxy uç noktasına eklemek için gereken adımlara hızlıca göz atmak üzere OAuth uç noktalarını ve politikalarını yapılandırma başlıklı makaleyi inceleyin.

Erişim jetonu alma

Bu politika, /accesstoken yoluna eklenir. OAuthV2 politikasını, GenerateAccessToken işlemi belirtilmiş şekilde kullanır.

<OAuthV2 name="GetAccessToken">
  <Operation>GenerateAccessToken</Operation>
  <ExpiresIn>3600000</ExpiresIn>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse/>
</OAuthV2>

Erişim jetonunu almak için yapılan API çağrısı bir POST'tur ve base64 kodlu client_id + client+secret ile sorgu parametresi grant_type=client_credentials içeren bir yetkilendirme üstbilgisi içerir. Kapsam ve durum için isteğe bağlı parametreler de içerebilir. Örneğin:

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST 'https://docs-test.apigee.net/oauth/accesstoken' -d 'grant_type=client_credentials' -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVgT1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ'

Erişim jetonu doğrulama politikasını ekleme

API'nizi OAuth 2.0 güvenliğiyle korumak için VerifyAccessToken işlemiyle bir OAuthV2 politikası eklemeniz gerekir. Bu politika, gelen isteklerin geçerli bir erişim jetonuna sahip olup olmadığını kontrol eder. Jeton geçerliyse Edge isteği işler. Geçerli değilse Edge hata döndürür. Temel adımlar için Erişim jetonlarını doğrulama başlıklı makaleye bakın.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="VerifyAccessToken">
    <DisplayName>VerifyAccessToken</DisplayName>
    <ExternalAuthorization>false</ExternalAuthorization>
    <Operation>VerifyAccessToken</Operation>
    <SupportedGrantTypes/>
    <GenerateResponse enabled="true"/>
    <Tokens/>
</OAuthV2>

Korunan API'yi çağırma

OAuth 2.0 güvenliğiyle korunan bir API'yi çağırmak için geçerli bir erişim jetonu göndermeniz gerekir. Doğru kalıp, jetonu bir yetkilendirme başlığına aşağıdaki şekilde eklemektir: Erişim jetonunun "taşıyıcı jeton" olarak da adlandırıldığını unutmayın.

$ curl -H "Authorization: Bearer UAj2yiGAcMZGxfN2DhcUbl9v8WsR" \
  http://myorg-test.apigee.net/v0/weather/forecastrss?w=12797282 

Erişim jetonu gönderme başlıklı makaleyi de inceleyin.

Ek kaynaklar

  • Apigee, API geliştiriciler için online eğitimler sunar. Bu eğitimler arasında OAuth'un da yer aldığı API güvenliği kursu da bulunur.
  • OAuthV2 politikası: Yetkilendirme sunucusuna nasıl istekte bulunulacağını ve OAuthV2 politikasının nasıl yapılandırılacağını gösteren birçok örnek içerir.