Yetkilendirme kodu izin türünü uygulama

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

Yetkilendirme kodu, en çok tercih edilen OAuth 2.0 izin türlerinden biridir. Yetkilendirme kodu akışı, "üç ayaklı OAuth" yapılandırmasıdır. Bu yapılandırmada kullanıcı, kaynak sunucuda kimliğini doğrular ve istemci uygulamasına kullanıcı adı/şifre vermeden uygulamaya korunan kaynaklarına erişme izni verir.

Bu konu hakkında

Bu konuda, OAuth 2.0 yetkilendirme izni türü akışının genel bir açıklaması ve genel bakışı sunulmakta, ayrıca bu akışın Apigee Edge'de nasıl uygulanacağı ele alınmaktadır.

Video

API'lerinizi güvenli hale getirmek için OAuth 2.0 yetkilendirme izni türünü nasıl kullanacağınızı öğrenmek üzere kısa bir video izleyin.

Kullanım alanları

Bu yetki 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çin tasarlanmıştır. Örneğin, genel API programlarına kaydolan geliştiricilere genellikle güvenilmemelidir. Bu yetkilendirme türünde, kaynak sunucusundaki kullanıcının kimlik bilgileri hiçbir zaman uygulamayla paylaşılmaz.

Kod örneği

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

Akış şeması

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

İpucu: Bu diyagramın daha büyük bir sürümünü görmek için diyagramı 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 kullanıldığı yetkilendirme kodu izin türünü uygulamak için gereken adımların özeti aşağıda verilmiştir. Bu akışın anahtar noktasının, istemcinin kaynak sunucusundaki kullanıcı kimlik bilgilerini hiçbir zaman görmemesi olduğunu 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. Kullanıcı akışı başlatır

Uygulamanın, bir kaynak sunucusundan kullanıcının korunan kaynaklarına (örneğin, bir sosyal medya sitesindeki kişiler listesi) erişmesi gerektiğinde Apigee Edge'e bir API çağrısı gönderilir. Apigee Edge, 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ği sırada elde ettiği bilgileri (istemci kimliği ve yönlendirme URI'si) içerir.

2. Kullanıcı kimlik bilgilerini girer

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

3. Kullanıcı izin verir

Bu adımda kullanıcı, uygulamaya kaynaklarına erişme izni verir. İzin formu genellikle kapsam seçimlerini içerir. Kullanıcı, uygulamanın kaynak sunucusunda yapmasına izin verilen işlemleri seçebilir. Örneğin, kullanıcı salt okuma izni veya uygulamanın kaynakları güncelleme izni verebilir.

4. Giriş uygulaması, Apigee Edge'e istek gönderir.

Giriş ve izin başarılı olursa giriş uygulaması, Apigee Edge'in /authorizationcode uç noktasına veri POST eder. Veriler arasında yönlendirme URI'si, istemci kimliği, kapsam, dahil etmek istediği kullanıcıya özel bilgiler ve oturum açma işleminin başarılı olduğuna dair bir gösterge yer alır.

5. Apigee Edge, yetkilendirme kodu oluşturur.

Edge, /authorizationcode uç noktasında oturum açma uygulamasından POST isteğini aldığında iki şey olur. İlk olarak Edge, isteğin parametrelerini veya üstbilgilerini başarı göstergesi için kontrol ederek girişin başarılı olduğunu belirler. Ardından Edge, giriş uygulamasından gönderilen yönlendirme URI'sinin, uygulama Apigee Edge'e kaydedilirken belirtilen yönlendirme URI'siyle eşleştiğinden emin olmak için kontrol yapar. Her şey yolundaysa Edge bir yetkilendirme kodu oluşturur.

{redirect_uri}?code={authorization_code}&state={some_string}

6. İstemci, yetkilendirme kodunu alır ve Edge'den erişim jetonu ister.

Geçerli bir yetkilendirme koduyla istemci artık Edge'den erişim jetonu isteyebilir. Bu işlem için istemci kimliği ve istemci gizli anahtarı (uygulama Edge'e kaydedildiğinde elde edilir), yetkilendirme kodu, izin türü ve kapsam POST edilir. İstemci kimliği ve gizli anahtarlar eklendiğinde Apigee Edge, istemci uygulamasının kaydedilen uygulama 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'

7. İ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 geçerlilik süresi sona erer ve yalnızca kullanıcının uygulamaya kaynaklarına erişim izni verirken belirttiği kapsam için geçerli olur.

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

Artık istemci, geçerli bir erişim jetonuyla korumalı API'ye çağrı yapabilir. Bu senaryoda, istekler Apigee Edge'e (proxy) gönderilir ve Edge, API çağrısını hedef kaynak sunucusuna iletmeden önce erişim jetonunu doğrulamaktan sorumludur. Erişim jetonları, bir Yetkilendirme üstbilgisinde 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ını ekleme ve yapılandırma

Özel akış yapılandırması

Genellikle bu yetki türü akışını, akışın her adımının veya "bacağının" Apigee Edge proxy'sindeki bir akışla tanımlanacağı şekilde yapılandırırsınız. Her akışın bir uç noktası ve yetkilendirme kodu veya erişim jetonu oluşturma gibi gerekli OAuth'a özgü görevi gerçekleştiren bir politikası vardır. Örneğin, aşağıdaki XML'de gösterildiği gibi /oauth/authorizationcode uç noktası, GenerateAuthCode adlı ilişkili bir politikaya sahiptir (bu, GenerateAuthorizationCode işlemi belirtilmiş bir OAuthV2 politikasıdır).

Akış yapılandırmasını göstermenin en kolay yolu bir XML örneği kullanmaktır. Her akış hakkında bilgi için satır içi yorumlara bakın. Bu bir örnektir. Akışların ve yolların adları istediğiniz gibi yapılandırılabilir. Buna benzer özel bir akış oluşturmak için gereken adımlara hızlıca göz atmak isterseniz OAuth uç noktalarını ve politikalarını yapılandırma başlıklı makaleyi de inceleyin.

GitHub'daki örnek uygulamaya da göz atı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ç nokta ile ilişkilendirilmiş bir politika vardır. Politikaların örneklerine göz atalım. Proxy uç noktalarına OAuthV2 politikaları eklemek için gereken adımlara dair hızlı bir genel bakış için OAuth uç noktalarını ve politikalarını yapılandırma başlıklı makaleye de göz atın.

Giriş yönlendirmesi

Bu, /oauth/authorize yoludur. Ekli politika, kullanıcıyı bir giriş uygulamasına yönlendirmekten sorumludur. Burada son kullanıcı, istemci uygulamasına kullanıcı adını ve şifresini açıklamadan güvenli bir şekilde kimliğini doğrulayabilir ve istemci uygulamasının korunan kaynaklarına erişmesine izin verebilir. Bunu bir hizmet çağrısı politikası, JavaScript, Node.js veya başka yollarla gerçekleştirebilirsiniz.

İsteği yapmak için kullanılan API çağrısı bir GET isteğidir 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 alma

Bu, /oauth/authorizationcode yoludur. OAuthV2 politikasını, GenerateAuthorizationCode işlemi belirtilmiş şekilde kullanır.

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

Yetkilendirme kodunu almak için yapılan API çağrısı bir POST işlemidir ve bu örnekte gösterildiği gibi istek gövdesinde form parametreleri olarak client_id, response_type, redirect_uri ve isteğe bağlı olarak scope ve state parametrelerinin iletilmesini gerektirir:

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

Erişim jetonu alma

Bu politika, /oauth/accesstoken yoluna eklenir. OAuthV2 politikasını, GenerateAccessToken işlemi belirtilmiş şekilde kullanır. Bu durumda, grant_type parametresinin sorgu parametresi olarak gönderilmesi 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 jetonunu almak için yapılan API çağrısı bir POST isteğidir ve yetkilendirme kodu, client_id, client_secret, grant_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 'code={authorization_code}&client_id=bBGAQrXgivA9lKu7NMPyoYpVKNhGar6K&client_secret=hAr4Gn0gA9vAyvI4'

Bu yalnızca temel bir özet. Üretim örneğinde URL oluşturma, dönüşüm yapma ve diğer görevleri gerçekleştirme ile ilgili birçok başka politika yer alır. Tam 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 bir VerifyAccessToken politikası (VerifyAccessToken işlemi belirtilmiş bir OAuthV2 politikası) ekleyin. Böylece, korunan kaynaklara yönelik bir istek geldiğinde bu politika yürütülür. Edge, her isteğin geçerli bir erişim jetonuna sahip olduğundan emin olmak için kontrol yapar. Aksi takdirde 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 göndermeniz gerekir. Doğru kalıp, jetonu bir yetkilendirme üstbilgisine 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.