Yetkilendirme kodu izin türünü uygulama

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

Yetkilendirme kodu, en sık kullanılan OAuth 2.0 izin türlerinden biridir. Yetkilendirme kod akışı "üç aşamalı OAuth"tur. yapılandırma. Bu yapılandırmada, kullanıcı kendisi kaynak sunucuya gönderir ve uygulamanın korunan kaynaklarına erişmesine izin verir. istemci uygulamasına kullanıcı adını/şifreleri bildirmeden.

Bu konu hakkında

Bu konu, genel bir açıklama ve OAuth 2.0 yetkilendirme izni türüne genel bakış sunar. ve bu akışın Apigee Edge'de nasıl uygulanacağını anlattı.

Video

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

Kullanım alanları

Bu izin türü, izin verilmeyen üçüncü taraf geliştiriciler tarafından yazılan API sağlayıcıyla güvenilir bir iş ilişkisine sahip olmalıdır. Örneğin, Google'ın ticaret sitesi olan genel olarak güvenilir kabul edilmemelidir. Bu izin türünde kullanıcının kaynak sunucusundaki kimlik bilgileri hiçbir zaman uygulamayla paylaşılmaz.

Kod örneği

Aşağıdaki sayfada, yetkilendirme kodu izin türünün eksiksiz, çalışan bir örnek uygulamasını bulabilirsiniz: Apigee Edge'i GitHub'daki api-platform-samples deposunda bulabilirsiniz. oauth-advanced sample. Bkz. README dosyasını inceleyebilirsiniz.

Akış diyagramı

Aşağıdaki akış şemasında, Apigee Edge ile yetkilendirme kodu OAuth akışı gösterilmektedir işlevi görür.

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

Yetkilendirme kodu akışındaki adımlar

Aşağıda, yetkilendirme kodu atama türünü uygulamak için gereken adımların Apigee Edge, yetkilendirme sunucusu işlevi görür. Bu akışın kilit noktası, müşterinin kullanıcının kimlik bilgilerini kaynak sunucuda görmez.

Ön koşul: İstemci uygulamasının aşağıdaki işlemler için Apigee Edge'e kayıtlı olması gerekir: istemci kimliğini ve istemci gizli anahtarlarını edinin. Aşağıdakiler için İstemci uygulamalarını kaydetme başlıklı makaleyi inceleyin: bolca fırsat sunuyor.

1. Akışı kullanıcı başlatır

Uygulamanın, kullanıcının korunan kaynaklarına bir kaynak sunucusundan erişmesi gerektiğinde ( bir sosyal medya sitesindeki kişi listesi) Apigee Edge'e bir API çağrısı gönderir. İstemcinin kimliğini doğrular ve geçerliyse kullanıcının tarayıcısını kullanıcı kimlik bilgilerini girecektir. API çağrısı, istemci uygulamasına ait bilgileri içerir. kaydedildiğinde elde edilen değeri içerir: istemci kimliği ve yönlendirme URI'si.

2. Kullanıcı kimlik bilgilerini girer

Kullanıcıya giriş kimlik bilgilerini girmesi istenen bir giriş sayfası gösterilir. Öğe başarılı olursa sonraki adıma geçeriz.

3. Kullanıcı izin verir

Bu adımda kullanıcı, uygulamaya kaynaklarına erişmesi için izin verir. İzin formu genellikle kapsam seçimlerini içerir. Bu seçimler, kullanıcının uygulamada hangi işlemleri yapmasına izin verileceğini seçebilir. kaynak sunucu. Örneğin, kullanıcı bir doküman için salt okuma izni ya da uygulamayı kullanarak kaynakları güncelleyebilirsiniz.

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

Giriş yapma ve izin verme başarılı olursa giriş uygulaması, verileri /Authorizationcode'a POST gönderir. uç noktası haline geldi. Yönlendirme URI'si, istemci kimliği, kapsam, kullanıcıya özel tüm veriler bilgi ve girişin başarılı olduğuna dair bir gösterge.

5. Apigee Edge Kullanıcı bir yetkilendirme kodu oluşturur

Edge, /authcode uç noktasında giriş uygulamasından bir GET isteği aldığında şeyler olur. Edge ilk olarak girişin başarılı olduğunu belirler (HTTP durumunu kontrol ederek veya başka şekillerde) kullanabilirsiniz. Next Edge, giriş uygulamasından gönderilen yönlendirme URI'sinin sağlandığından emin olmak için Uygulama Apigee Edge'e kaydettirildiğinde belirtilen yönlendirme URI'si ile eşleşir. Eğer her şey yolunda gider. 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. Kenar Yetkilendirme kodunu istemciye geri gönderir.

Edge, 302 yönlendirmesi ile birlikte kimlik doğrulama kodunu sorgu parametresi olarak gerekir.

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

Artık geçerli bir yetkilendirme koduyla istemci, Edge'den erişim jetonu isteyebilir. Bu işlemi İstemci kimliğini ve istemci gizli anahtarlarını (uygulama Edge'e kaydedildiğinde elde edilir) POSTA YAYINLAMA izin türünü ve kapsamını gösterir. Apigee Edge'in doğrulama yapabilmesi için istemci kimliğini ve gizli anahtarları ekleyerek kayıtlı uygulamanın istemci uygulaması olduğundan emin olun. Ö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. Müşteri erişim jetonu

Her şey başarılı olursa Edge istemciye bir erişim jetonu döndürür. Erişim jetonu bir geçerlilik bitiş tarihi vardır ve yalnızca uygulamanın kaynaklarına erişmesine izin vermelidir.

9. Müşteri, korumalı API

Artık geçerli bir erişim koduyla istemci, korunan API'ye çağrı yapabilir. Burada senaryoda, Apigee Edge'e (proxy) istekler yapılır ve Edge, erişim jetonunu, API çağrısını hedef kaynak sunucusuna iletmeden önce yapmanız gerekir. Erişim jetonları iletilecektir. Ö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 bir dizi OAuth isteğini işlemesi gerekir: Erişim için jetonlar, kimlik doğrulama kodları, yenileme jetonları, giriş sayfası yönlendirmeleri vb. bulunur. Başarılı bir şekilde şu uç noktaları yapılandırın:

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

Özel akış yapılandırması

Bu izin türü akışını genellikle her bir adımın veya "bacak"ın akışın tanımlandığı yer Apigee Edge proxy'sindeki bir akışla çalışır. Her akışın bir uç noktası ve Yetkilendirme kodu veya erişim jetonu oluşturma gibi OAuth'a özel bir görev gereklidir. Örneğin, aşağıdaki XML'de gösterildiği gibi, /oauth/authorizationcode uç noktasının bir adlı bir OAuthV2 politikası olan GenerateAuthCode ( GenerateAuthorizationCode işlemi belirtildi).

Akış yapılandırmasını göstermenin en kolay yolu, XML örneği kullanmaktır. Satır içileri göster açıklamaları ekleyin. Bu bir örnektir. Akış ve yol adları, yapılandırabilirsiniz. Ayrıca bkz. OAuth'u Yapılandırma uç noktaları ve politikaları ile özel bir akış oluşturmak için gereken adımlara hızlıca genel bakış İşte bu şekilde.

Ayrıca bkz. örneğe uygulama hakkında daha fazla bilgi edinin.

<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. Görüntüleyin OAuth'u yapılandırma uç noktaları ve politikaları'nı tıklayın. bağlantı noktası haline gelir.

Giriş yönlendirmesi

Bu, /oauth/authorize yoludur. Ekteki politika, kullanıcıyı, son kullanıcının güvenli bir şekilde kimlik doğrulamasını ve yetkilendirmesini yapabileceği bir giriş uygulamasına yönlendirme istemci uygulamasının korunan kaynaklarına, kullanıcı adlarını ve şifrelerini ifşa etmeden erişmesini sağlar. istemci uygulaması. Bunu bir hizmet açıklama metni politikası, JavaScript, Node.js veya anlamına gelir.

İsteği yapacak API çağrısı bir GET değeridir ve client_id sorgu parametrelerini gerektirir. response_type, redirect_uri, kapsam ve durum.

$ 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

Bu, /oauth/authorizationcode yoludur. OAuthV2 politikasını GenerateAuthorizationCode işlemi belirtildi.

<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 kullanılan API çağrısı bir GET'dir ve sorgu parametrelerini gerektirir. Client_id, response_type ve isteğe bağlı olarak kapsam ve durum özellikleri (aşağıdaki örnekte gösterildiği gibi):

$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. OAuthV2 kullanır belirtilen GenerateAccessCode işlemiyle politika. Bu örnekte, Grant_type parametresi sorgu parametresi olarak bekleniyor:

<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 almak için kullanılan API çağrısı bir POST'tur ve client_id, client_secret,grant_type=onaylama_kodu ve isteğe bağlı olarak kapsam. Ö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, temel bir özettir. Bir üretim örneğinde URL'ler oluşturmak, dönüştürme yapmak ve diğer görevleri gerçekleştirmek. Daha fazla bilgi edinmek için GitHub'daki devam eden bir projedir.

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

VerifyAccessToken politikası (VerifyAccessToken işlemiyle birlikte OAuthV2 politikası) ekleyin. korumalı bir API'ye erişen herhangi bir akışın başına ekleyebilirsiniz. Böylece API, . Edge, her istekte bir geçerlidir. Aksi halde hata döndürülür. Temel adımlar için Erişim jetonlarını doğrulama başlıklı makaleyi inceleyin.

<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 sunmanız gerekir. jeton. Doğru kalıp, jetonu aşağıdaki gibi bir Yetkilendirme başlığına eklemektir: Not aynı zamanda "hamiline ait jeton" olarak da adlandırıldığından emin olun.

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

Ayrıca bkz. Bir erişim jetonu ile kullanılabilir.