Yetkilendirme kodu izin türünü uygulama

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

Yetkilendirme kodu, en sık kullanılan OAuth 2.0 izin türlerinden biridir. Yetkilendirme kodu akışı "üç aşamalı OAuth" yapılandırmasıdır. Bu yapılandırmada kullanıcı, kaynak sunucuda kendi kimliğini doğrular ve istemci uygulamasına kullanıcı adlarını/şifrelerini açıklamadan uygulamanın korumalı kaynaklarına erişmesi için izin verir.

Bu konu hakkında

Bu konu başlığında OAuth 2.0 yetkilendirme izni türü akışı hakkında genel bir açıklama ve genel bakış sunulmakta ve bu akışın Apigee Edge'de nasıl uygulanacağı açıklanmaktadır.

Video

API'lerinizin güvenliğini sağlamak amacıyla OAuth 2.0 yetkilendirme izin türünün nasıl kullanılacağını öğrenmek için kısa bir video izleyin.

Kullanım alanları

Bu hibe türü, API sağlayıcısıyla güvenilir bir iş ilişkisi olmayan üçüncü taraf geliştiriciler tarafından yazılan uygulamalar içindir. Örneğin, herkese açık API programlarına kaydolan geliştiricilerin genel olarak güvenilir olmaması gerekir. Bu izin türüyle, kullanıcının kaynak sunucusundaki kimlik bilgileri hiçbir zaman uygulamayla paylaşılmaz.

Kod örneği

Apigee Edge'deki yetkilendirme kodu izin türünün eksiksiz ve çalışan bir örnek uygulamasını GitHub'daki api-platform-samples deposunda bulabilirsiniz. api-platform-samples/sample-proxies dizinindeki oauth-advanced örneğine bakın. Örnekle ilgili ayrıntılar için BENİOKU dosyasına bakın.

Akış diyagramı

Aşağıdaki akış şemasında, yetkilendirme sunucusu olarak Apigee Edge'in kullanıldığı yetkilendirme kodu OAuth akışı gösterilmektedir.

İpucu: Bu diyagramın daha büyük bir sürümünü görmek için şemayı sağ tıklayıp yeni bir sekmede açın veya kaydedip bir resim görüntüleyicide açın.

Yetkilendirme kodu akışındaki adımlar

Apigee Edge'in yetkilendirme sunucusu olarak hizmet verdiği yerlerde yetkilendirme kodu atama türünü uygulamak için gereken adımların özetini aşağıda bulabilirsiniz. Bu akışın anahtarının, istemcinin kaynak sunucuda kullanıcının kimlik bilgilerini hiçbir zaman görememesi olduğunu 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. Akışı kullanıcı başlatır

Uygulamanın, bir kaynak sunucusundan kullanıcının korunan kaynaklarına (örneğin, bir sosyal medya sitesindeki kişi listesine) erişmesi gerektiğinde, Apigee Edge'e bir API çağrısı gönderir. Bu API, istemcinin kimliğini doğrular ve geçerliyse kullanıcının tarayıcısını, kullanıcının kimlik bilgilerini gireceği bir giriş sayfasına yönlendirir. API çağrısı, istemci uygulamasının kaydedildiğinde elde ettiği bilgileri içerir: istemci kimliği ve yönlendirme URI'si.

2. Kullanıcı kimlik bilgilerini girer

Kullanıcı artık giriş kimlik bilgilerini girmesinin istendiği bir giriş sayfası görür. Giriş başarılı olursa sonraki adıma geçeriz.

3. Kullanıcı izin veriyor

Bu adımda kullanıcı, uygulamanın kaynaklarına erişmesi için izin verir. İzin formu genellikle kapsam seçimlerini içerir. Kullanıcı, burada uygulamanın kaynak sunucuda hangi işlemleri yapmasına izin verildiğini seçebilir. Örneğin, kullanıcı salt okuma veya uygulamanın kaynakları güncellemesi için izin verebilir.

4. Giriş uygulaması, Apigee Edge isteği gönderir

Giriş ve izin başarılı olursa giriş uygulaması, verileri Apigee Edge'in /authorizationcode uç noktasına gönderir. Veriler arasında yönlendirme URI'si, istemci kimliği, kapsam, eklemek istediği kullanıcıya özel bilgiler ve girişin başarılı olduğuna dair bir gösterge bulunur.

5. Apigee Edge, yetkilendirme kodu oluşturur

Edge, /authorizationcode uç noktasında giriş uygulamasından bir GET isteği aldığında iki şey olur. İlk olarak Edge, giriş işleminin başarılı olduğunu belirler (HTTP durumunu kontrol ederek veya başka yollarla). Next Edge, giriş uygulamasından gönderilen yönlendirme URI'sinin, uygulama Apigee Edge'e kaydedildiğinde belirtilen yönlendirme URI'si ile eşleşip eşleşmediğini kontrol eder. Her şey yolundaysa Edge bir yetkilendirme kodu oluşturur. Örneğin:

http://myorg-test.apigee.net/oauth/authorizationcode?client_id={consumer_key}&response_type=code&redirect_uri={redirect_uri}&scope=scope1%20scope2&state={some_string}

6. Edge, yetkilendirme kodunu istemciye geri gönderir

Edge, istemciye sorgu parametresi olarak yetkilendirme kodu eklenmiş bir 302 yönlendirmesi gönderir.

7. İstemci yetkilendirme kodunu alır ve Edge'den bir erişim kodu ister

İstemci artık geçerli bir yetkilendirme kodu ile Edge'den erişim jetonu isteyebilir. Bunun için istemci kimliğini ve istemci gizli anahtarı (uygulama Edge'e kaydedildiğinde elde edilir), izin türünü ve kapsamı POSTA ETMEKTEDİR. Apigee Edge, istemci kimliğini ve gizli anahtarları dahil ederek istemci uygulamasının kayıtlı olduğunu doğrulayabilir. Örneğin:

$ curl https://{org_name}-test.apigee.net/my_oauth_proxy/accesstoken?code=Xyz123&grant_type=authorization_code -X POST -d 'client_id=bBGAQrXgivA9lKu7NMPyoYpKNhGar6K&client_secret=hAr4GngA9vAyvI4'

8. İstemci bir erişim jetonu alır

Her şey başarılı olursa Edge, istemciye bir erişim jetonu döndürür. Erişim jetonunun bir son kullanma tarihi olur ve jetonun geçerliliği, yalnızca uygulamanın kaynaklarına erişmesine izin veren kullanıcı tarafından belirtilen kapsam için geçerli olur.

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

Artık geçerli bir erişim koduyla 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. Erişim jetonları, bir Yetkilendirme üst bilgisi içinde iletilir. Örneğin:

$ curl -H "Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282

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

Yetkilendirme sunucusu olarak Edge'in erişim jetonları, yetkilendirme kodları, yenileme jetonları, giriş sayfası yönlendirmeleri vb. için bir dizi OAuth isteğini işlemesi gerekir. Bu uç noktaları yapılandırmak için iki temel adım vardır:

  • Özel akışlar oluşturma
  • OAuthV2 politikaları ekleme ve yapılandırma

Özel akış yapılandırması

Genellikle bu izin türü akışını, akışın her adımı veya "aktarımı" Apigee Edge proxy'sindeki bir akış tarafından tanımlanacak şekilde yapılandırırsınız. Her akışın, yetkilendirme kodu veya erişim jetonu oluşturma gibi OAuth'a özgü gerekli görevi gerçekleştiren bir uç noktası ve politikası vardır. Örneğin, aşağıdaki XML'de gösterildiği gibi, /oauth/authorizationcode uç noktasının GenerateAuthCode adlı ilişkilendirilmiş bir politikası vardır (Bu politika, GenerateAuthorizationCode işleminin belirtildiği bir OAuthV2 politikasıdır).

Akış yapılandırmasını göstermenin en kolay yolu, XML örneğidir. Her bir akışla ilgili bilgi edinmek için satır içi yorumlara bakın. Bu bir örnektir. Akış ve yol adları istediğiniz gibi yapılandırılabilir. Buna benzer 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 de göz atın.

GitHub'daki örnek uygulamaya da bakın.

<Flows>
<Flow name="RedirectToLoginApp">
<!--
Publish this URI to developers to use for their 'login' link
-->
<Condition>proxy.pathsuffix == "/oauth/authorize"</Condition>
<Request>
<Step><Name>RedirectToLoginPage</Name></Step>
</Request>
</Flow>
<Flow name="GetAuthCode">
<!--
Call this URL from your Login app after you authenticate the user.
The policy will automatically return the auth code in the response to the
redirect_uri registered by the calling app
-->
<Condition>proxy.pathsuffix == "/oauth/authorizationcode"</Condition>
<Request>
<Step><Name>GenerateAuthCode</Name></Step>
</Request>
</Flow>
<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>GenerateAccessToken</Name></Step>
</Request>
</Flow>
</Flows>

Akışları politikalarla yapılandırma

Her uç noktanın kendisiyle ilişkilendirilmiş bir politikası vardır. Politika örneklerine göz atalım. Proxy uç noktalarına OAuthV2 politikaları eklemek 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 de göz atın.

Giriş yönlendirmesi

Bu, /oauth/authorize yoludur. Ekteki politika, kullanıcıyı bir giriş uygulamasına yönlendirmekten sorumludur. Burada son kullanıcı, kullanıcı adını ve şifresini istemci uygulamasına açıklamadan istemci uygulamasını güvenli bir şekilde kimlik doğrulaması yapıp korumalı kaynaklarına erişmesi için yetkilendirebilir. Bu işlemi hizmet açıklama metni politikası, JavaScript, Node.js veya diğer yollarla gerçekleştirebilirsiniz.

İsteği yapmak için kullanılan API çağrısı bir GET çağrısıdır ve client_id,Response_type, redirect_uri, scope ve state sorgu parametrelerini gerektirir.

$ curl http://myorg-test.apigee.net/oauth/authorize?client_id={consumer_key}&response_type=code&redirect_uri={redirect_uri}&scope=scope1%20scope2&state={some_string}

Yetkilendirme kodu alın

Bu, /oauth/authorizationcode yoludur. Belirtilen GenerateAuthorizationCode işlemiyle OAuthV2 politikasını kullanır.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="GetAuthCode">
    <DisplayName>GetAuthCode</DisplayName>
    <Operation>GenerateAuthorizationCode</Operation>
    <ExpiresIn>600000</ExpiresIn>
    <GenerateResponse/>
</OAuthV2>

Yetkilendirme kodunu almaya yönelik API çağrısı bir GET çağrısıdır ve bu örnekte gösterildiği gibi client_id, konulu yanıt_türü ve isteğe bağlı olarak kapsam ve durum sorgu parametrelerini gerektirir:

$curl http://myorg-test.apigee.net/oauth/authorizationcode?client_id={consumer_key}&response_type=code&scope=scope1%20scope2&state={some_string}

Erişim jetonu al

Bu politika, /oauth/accesstoken yoluna eklidir. Belirtilen GenerateAccessCode işlemiyle birlikte OAuthV2 politikasını kullanır. Bu durumda, grant_type parametresi bir sorgu parametresi olarak beklenir:

<OAuthV2 name="GetAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>360000000</ExpiresIn> 
    <SupportedGrantTypes> 
        <GrantType>authorization_code</GrantType> 
    </SupportedGrantTypes> 
    <GrantType>request.queryparam.grant_type</GrantType> 
    <GenerateResponse/> 
</OAuthV2>

Erişim kodunu almaya yönelik API çağrısı bir POST işlemidir ve client_id, client_secret, allow_type=authorization_code ve isteğe bağlı olarak kapsamı içermelidir. Örneğin:

$ curl https://{org_name}-test.apigee.net/oauth/accesstoken?grant_type=authorization_code -X POST -d 'client_id=bBGAQrXgivA9lKu7NMPyoYpVKNhGar6K&client_secret=hAr4Gn0gA9vAyvI4'

Bu sadece temel bir özettir. Üretim örneği, URL oluşturma, dönüşüm gerçekleştirme ve diğer görevleri gerçekleştirmeye ilişkin diğer birçok politikayı içerir. Eksiksiz ve çalışan bir proje için GitHub'daki örneğe bakın.

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

Korunan bir API'ye erişen herhangi bir akışın başına, korunan bir kaynak isteği geldiğinde yürütülmesi için bir ValidAccessToken politikası (VerifyAccessToken işleminin belirtildiği OAuthV2 politikası) ekleyin. Edge, her isteğin geçerli bir erişim jetonuna sahip olup olmadığını kontrol eder. Aksi takdirde bir hata döndürülü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 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ünü de inceleyin.