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

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

İstemci kimlik bilgisi izin türüyle uygulamalar, kendi kimlik bilgilerini (İstemci Kimliği ve İstemci Sırrı) Apigee Edge'de erişim jetonu oluşturmak için ayarlanan bir uç noktaya gönderir. Kimlik bilgileri geçerliyse Edge, istemci uygulamasına erişim jetonu döndürür.

Bu konu hakkında

Bu konu başlığında OAuth 2.0 istemci kimlik bilgileri izin türünün genel açıklaması ve bu akışın Apigee Edge'de nasıl uygulanacağı açıklanmaktadır.

Kullanım alanları

Bu izin türü, genellikle uygulama aynı zamanda kaynak sahibi olduğunda kullanılır. Örneğin, bir uygulamanın, işini gerçekleştirmek için kullandığı verileri depolamak ve almak amacıyla, son kullanıcının özel olarak sahip olduğu veriler yerine, bulut tabanlı bir arka uç depolama hizmetine erişmesi gerekebilir. Bu izin türü akışı, yalnızca istemci uygulaması ile yetkilendirme sunucusu arasında gerçekleşir. Son kullanıcı bu bağış türü akışına katılmaz.

Roller

Roller, OAuth akışına katılan "aktörleri" belirtir. Apigee Edge'in bu noktada devreye girmesine yardımcı olması için istemci kimlik bilgisi rollerine hızlıca göz atalım. OAuth 2.0 rolleriyle ilgili ayrıntılı bilgi için IETF OAuth 2.0 spesifikasyonu sayfasını inceleyin.

  • İstemci Uygulaması -- Kullanıcının korumalı kaynaklarına erişmesi gereken uygulama. Genellikle bu akışla 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ı kaynaklar için yetkilendirilmiş istekleri kaynak sunucuya iletmektir.
  • Kaynak Sunucusu -- İstemci uygulamasının erişim iznine ihtiyaç duyduğu korumalı verileri depolayan arka uç hizmeti. Apigee Edge'de barındırılan API proxy'lerini koruyorsanız kaynak sunucu da Apigee Edge'dir.

Kod örneği

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

Akış diyagramı

Aşağıdaki akış şemasında, yetkilendirme sunucusu olarak hizmet veren Apigee Edge'le istemci kimlik bilgileri akışı gösterilmektedir. Genel olarak Edge bu akışta aynı zamanda kaynak sunucudur. Diğer bir deyişle, API proxy'leri korunan kaynaklardır.


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

Aşağıda, Apigee Edge'in yetkilendirme sunucusu olarak hizmet ettiği istemci kimlik bilgileri kod atama türünü uygulamak için gereken adımlar özetlenmiştir. Bu akışta istemci uygulamasının istemci kimliğini ve istemci gizli anahtarını gösterdiğini ve geçerli olmaları durumunda Apigee Edge'in erişim jetonu döndürdüğünü unutmayın.

Ön koşul: İstemci kimliği ve istemci gizli anahtarı anahtarlarını almak için istemci uygulamasının Apigee Edge'e kayıtlı olması gerekir. Ayrıntılar için İstemci uygulamalarını kaydetme bölümüne bakın.

1. İstemci bir erişim jetonu istiyor

Erişim jetonu almak için istemci, 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 gönderir. Ayrıca, grant_type=client_credentials parametresi bir sorgu parametresi olarak iletilmelidir. (Bununla birlikte, OAuthV2 politikasını istek başlığında veya gövdesinde bu parametreyi kabul edecek şekilde yapılandırabilirsiniz. Ayrıntılar için OAuthV2 politikasına 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 sorgu parametreleri olarak yukarıda gösterildiği gibi aktarabilirsiniz. Ancak bunları Yetkilendirme başlığında base64 URL kodlamalı dize olarak geçirmek iyi bir uygulamadır. Bunu yapmak için bir base64 kodlama aracı veya yardımcı program kullanarak iki değeri iki nokta ile ayırarak kodlamanız gerekir. Şunun gibi: aBase64EncodeFunction(clientidvalue:clientsecret). Dolayısıyla, yukarıdaki örnek şu şekilde kodlanır:

sonuç = aBase64EncodeFunction(ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI) // İki değeri ayıran iki nokta üst üste işareti olduğuna dikkat edin.

Yukarıdaki dizenin base64 kodlamasının sonucu şu olur: 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ş. Yani politika, gönderilen anahtarları Apigee Edge'in uygulama kaydedildiğinde 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 bir yanıt döndürüyor

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

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

Artık geçerli bir erişim jetonuyla istemci, korunan API'ye çağrı yapabilir. Bu senaryoda Apigee Edge'e (proxy) istek gönderilir ve API çağrısını hedef kaynak sunucusuna iletmeden önce erişim jetonunu doğrulamaktan Edge 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 jetonu isteklerini işler. API geliştiricisi olarak, jeton isteklerini işlemek ve OAuthV2 politikası eklemek ve yapılandırmak için özel akışa sahip bir proxy oluşturmanız gerekir. Bu bölümde, bu 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 son eki /accesstoken ile eşleştiğinde GetAccessToken politikası tetiklenir. Bunun gibi bir özel 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 bölümüne göz atı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

Uç noktaya aşağıdaki gibi bir politika eklemeniz gerekir. Proxy uç noktasına bir OAuthV2 politikası eklemek 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.

Erişim jetonu al

Bu politika, /accesstoken yoluna eklidir. Belirtilen GenerateAccessToken işlemiyle birlikte OAuthV2 politikasını 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 olarak kodlanmış client_id + client+secret ve request_type=client_credentials sorgu parametresini içeren bir Yetkilendirme başlığı içerir. Ayrıca 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 VerificationAccessToken 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 konusuna 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 sunmanız gerekir. Doğru kalıp, jetonu aşağıdaki gibi bir Yetkilendirme üst bilgisine eklemektir: Erişim jetonundan "hamiline ait jeton" olarak da anıldığını unutmayın.

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

Erişim jetonu gönderme bölümüne de göz atın.

Ek kaynaklar

  • Apigee, API geliştiricileri için OAuth'u da kapsayan API güvenliği konulu bir kurs da dahil olmak üzere API geliştiricileri için online eğitim sunmaktadır.
  • OAuthV2 politikası -- Yetkilendirme sunucusuna nasıl istek gönderileceğini ve OAuthV2 politikasının nasıl yapılandırılacağını gösteren çok sayıda örnek içerir.