OAuthV2 politikası

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

Ne

OAuthV2, OAuth 2.0 izin türü işlemlerinin gerçekleştirilmesine yönelik çok yönlü bir politikadır. Bu politika, Apigee Edge'de OAuth 2.0 uç noktalarını yapılandırmak için kullanılan birincil politikadır.

İpucu: Apigee Edge'de OAuth hakkında daha fazla bilgi edinmek için OAuth ana sayfasına göz atın. Kaynakların, örneklerin, videoların ve daha fazlasının bağlantılarını içerir. Bu politikanın çalışan bir uygulamada nasıl kullanıldığına dair iyi bir örnek görmek için GitHub'daki gelişmiş OAuth örneğine göz atın.

Örnekler

VerifyAccessToken

VerifyAccessToken

Bu OAuthV2 politika yapılandırması (VerifyAccessToken işlemiyle) Apigee Edge'e gönderilen bir erişim jetonunun geçerli olduğunu doğrular. Bu politika işlemi tetiklendiğinde, Edge istekte geçerli bir erişim jetonu arar. Erişim jetonu geçerliyse isteğin devam etmesine izin verilir. Geçersizse tüm işlemler durur ve yanıtta bir hata döndürülür.

<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-2">
    <DisplayName>OAuth v2.0 2</DisplayName>
    <Operation>VerifyAccessToken</Operation>
    <AccessTokenPrefix>Bearer</AccessTokenPrefix> <!-- Optional, default is Bearer -->
</OAuthV2>

Not: Yalnızca OAuth 2.0 Hamiline Ait Jetonlar desteklenir. Mesaj Kimlik Doğrulama Kodu (MAC) jetonları desteklenmez.

Örneğin:

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

Varsayılan olarak Edge, Authorization başlığındaki Bearer önekine sahip erişim jetonlarını kabul eder. Bu varsayılan değeri <AccessToken> öğesiyle değiştirebilirsiniz.

GenerateAccessToken

Erişim jetonları oluşturma

Desteklenen izin türlerinin her biri için erişim jetonu istemeyi gösteren örnekler Erişim jetonları ve yetkilendirme kodları isteme bölümüne bakın. Konuda aşağıdaki işlemlere ait örnekler yer alır:

GenerateAuthorizationCode

Yetkilendirme kodu oluştur

Yetkilendirme kodu isteme yöntemleri için Yetkilendirme kodu isteme bölümüne göz atın.

RefreshAccessToken

Erişim jetonunu yenileme

Yenileme jetonu kullanarak erişim jetonları istemeyle ilgili örnekler için Erişim jetonunu yenileme bölümüne bakın.

Yanıt akışı jetonu

Yanıt akışında erişim jetonu oluşturma

Bazen yanıt akışında erişim jetonu oluşturmanız gerekebilir. Örneğin, bunu bir arka uç hizmetinde yapılan bazı özel doğrulamalara yanıt olarak yapabilirsiniz. Bu örnekteki kullanım alanında hem erişim jetonu hem de yenileme jetonu gereklidir. Bu da örtülü izin türünü geçersiz kılar. Bu durumda, jetonu oluşturmak için şifre verme türünü kullanırız. Göreceğiniz gibi bu çalışmayı yapmanın püf noktası, JavaScript politikasıyla birlikte bir Yetkilendirme isteği başlığı iletmektir.

İlk olarak örnek politikaya bakalım:

<OAuthV2 enabled="true" continueOnError="false" async="false" name="generateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <AppEndUser>Doe</AppEndUser>
    <UserName>jdoe</UserName>
    <PassWord>jdoe</PassWord>
    <GrantType>grant_type</GrantType>
    <ClientId>a_valid_client_id</ClientId>
    <SupportedGrantTypes>
        <GrantType>password</GrantType>
    </SupportedGrantTypes>
</OAuthV2>

Bu politikayı yanıt akışına uygularsanız politikada doğru giriş parametreleri belirtilse bile 401 Yetkilendirilmemiş hatası vererek başarısız olur. Bu sorunu çözmek için Yetkilendirme isteği başlığı ayarlamanız gerekir.

Yetkilendirme başlığı, Base64 olarak kodlanmış client_id:client_secret ile bir Temel erişim şeması içermelidir.

Bu üst bilgiyi, OAuthV2 politikasından hemen önce yerleştirilmiş bir JavaScript politikasıyla bu şekilde ekleyebilirsiniz. "local_clientid" ve "local_secret" değişkenleri önceden ayarlanmış olmalı ve akışta kullanılabilir olmalıdır:

var client_id = context.getVariable("local_clientid");
var client_secret = context.getVariable("local_secret");
context.setVariable("request.header.Authorization","Basic "+CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1
                                      .parse(client_id + ':' + client_secret)));

"Temel kimlik doğrulama kimlik bilgilerini kodlama" bölümünü de inceleyin.

Öğe referansı

Politika referansında, OAuthV2 politikasının öğeleri ve özellikleri açıklanmaktadır.

Aşağıda gösterilen örnek politika, olası birçok yapılandırmadan biridir. Bu örnekte, GenerateAccessToken işlemi için yapılandırılmış bir OAuthV2 politikası gösterilmektedir. Zorunlu ve isteğe bağlı öğeleri içerir. Ayrıntılar için bu bölümdeki öğe açıklamalarına bakın.

<OAuthV2 name="GenerateAccessToken">
  <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type -->
  <Operation>GenerateAccessToken</Operation>
  <!-- This is in millseconds, so expire in an hour -->
  <ExpiresIn>3600000</ExpiresIn>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GrantType>request.queryparam.grant_type</GrantType>
  <GenerateResponse/>
</OAuthV2>

<OAuthV2> özellikleri

<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">

Aşağıdaki tabloda, tüm politika üst öğelerinde ortak olan özellikler açıklanmaktadır:

Özellik Açıklama Varsayılan Varlık
name

Politikanın dahili adı. name özelliğinin değeri harf, sayı, boşluk, kısa çizgi, alt çizgi ve nokta içerebilir. Bu değer 255 karakterden uzun olamaz.

İsteğe bağlı olarak, politikayı yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için <DisplayName> öğesini kullanın.

Yok Gerekli
continueOnError

Bir politika başarısız olduğunda hata döndürülmesi için false olarak ayarlayın. Bu, çoğu politika için beklenen davranıştır.

Bir politika başarısız olduktan sonra bile akış yürütülmesinin devam etmesi için true değerine ayarlayın.

false İsteğe bağlı
enabled

Politikayı uygulamak için true değerine ayarlayın.

Politikayı devre dışı bırakmak için false olarak ayarlayın. Bu politika, bir akışa bağlı kalsa bile uygulanmaz.

true İsteğe bağlı
async

Bu özellik kullanımdan kaldırıldı.

false Kullanımdan kaldırıldı

<DisplayName> öğesi

Politikayı, yönetim kullanıcı arayüzü proxy düzenleyicisinde farklı bir doğal dil adıyla etiketlemek için name özelliğine ek olarak kullanın.

<DisplayName>Policy Display Name</DisplayName>
Varsayılan

Yok

Bu öğeyi çıkarırsanız politikanın name özelliğinin değeri kullanılır.

Varlık İsteğe bağlı
Tür Dize

<AccessToken> öğesi

<AccessToken>request.header.access_token</AccessToken>

VerificationAccessToken, varsayılan olarak erişim jetonunun Authorization üst bilgisinde gönderilmesini bekler. Bu varsayılanı bu öğeyi kullanarak değiştirebilirsiniz. Örneğin request.queryparam.access_token, erişim jetonunun access_token adlı bir sorgu parametresi olarak mevcut olması gerektiğini belirtir.

<AccessToken>request.header.access_token</AccessToken> değerinin belirtildiği örnek:

curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"
<AccessToken>request.queryparam.access_token</AccessToken> değerinin belirtildiği örnek:

curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"

Varsayılan:

Yok

Bulunma:

İsteğe bağlı

Tür: Dize
İşlemlerde kullanılır:
  • VerifyAccessToken

<AccessTokenPrefix> öğesi

<AccessTokenPrefix>Bearer</AccessTokenPrefix>

ValidAccessToken, varsayılan olarak erişim jetonunun bir Yetkilendirme üst bilgisi içinde hamiline ait jeton olarak gönderilmesini bekler. Örneğin:

-H "Authorization: Bearer Rft3dqrs56Blirls56a"

Şu anda desteklenen tek ön ek hamiline aittir.

Varsayılan:

Taşıyıcı

Bulunma:

İsteğe bağlı

Tür: Dize
Geçerli değerler:

Taşıyıcı

İşlemlerde kullanılır:
  • VerifyAccessToken

<AppEndUser> öğesi

<AppEndUser>request.queryparam.app_enduser</AppEndUser>

Uygulama son kullanıcı kimliğinin yetkilendirme sunucusuna gönderilmesi gereken durumlarda bu öğe, Edge'in son kullanıcı kimliğini nerede araması gerektiğini belirtmenizi sağlar. Örneğin, bir sorgu parametresi olarak veya bir HTTP üst bilgisi olarak gönderilebilir.

Örneğin request.queryparam.app_enduser, AppEndUser'ın bir sorgu parametresi olarak mevcut olması gerektiğini belirtir (örneğin, ?app_enduser=ntesla@theramin.com). Örneğin, bir HTTP üst bilgisinde AppEndUser'ı zorunlu kılmak için bu değeri request.header.app_enduser olarak ayarlayın.

Bu ayarın sağlanması, erişim jetonuna uygulama son kullanıcı kimliğini eklemenize olanak tanır. Bu özellik, OAuth 2.0 erişim jetonlarını son kullanıcı kimliğine göre almak veya iptal edebilmek istediğinizde faydalıdır. Daha fazla bilgi için Son kullanıcı kimliği, uygulama kimliği veya her ikisine göre OAuth 2.0 erişim jetonlarının alınmasını ve iptal edilmesini etkinleştirme başlıklı makaleyi inceleyin.

Varsayılan:

Yok

Bulunma:

İsteğe bağlı

Tür: Dize
Geçerli değerler:

Çalışma zamanında politika tarafından erişilebilen tüm akış değişkenleri.

İzin türleriyle kullanılır:
  • authorization_code
  • kapalı
  • şifre
  • client_credentials

<Özellikler/Özellik>

<Attributes>
    <Attribute name="attr_name1" ref="flow.variable" display="true|false">value1</Attribute>
    <Attribute name="attr_name2" ref="flow.variable" display="true|false">value2</Attribute>
</Attributes>

Bir erişim jetonuna veya yetkilendirme koduna özel özellikler eklemek için bu öğeyi kullanın. Örneğin, çalışma zamanında çıkarılıp kontrol edilebilen bir erişim jetonuna kullanıcı kimliği veya oturum tanımlayıcısı yerleştirmek isteyebilirsiniz.

Bu öğe, bir akış değişkenindeki veya değişmez dizedeki bir değeri belirtebilmenizi sağlar. Hem değişken hem de dize belirtirseniz akış değişkeninde belirtilen değer kullanılır. Değişken çözümlenemezse varsayılan olarak dize kullanılır.

Bu öğenin kullanımı hakkında daha fazla bilgi için Jetonları ve Yetkilendirme Kodlarını Özelleştirme bölümüne bakın.

Yanıtta özel özellikleri görüntüleme veya gizleme

Bu politikanın GenerateResponse öğesini true olarak ayarlarsanız ayarladığınız özel özellikler de dahil olmak üzere jetonun tam JSON gösteriminin yanıtta döndürüleceğini unutmayın. Bazı durumlarda, istemci uygulamalarının görmesini önlemek için özel özelliklerinizin bazılarını veya tümünü yanıtta gizlemek isteyebilirsiniz.

Varsayılan olarak, özel özellikler yanıtta görünür. Bunları gizlemek isterseniz display parametresini false olarak ayarlayabilirsiniz. Örneğin:

<Attributes>
    <Attribute name="employee_id" ref="employee.id" display="false"/>
    <Attribute name="employee_name" ref="employee.name" display="false"/>
</Attributes>

display özelliği değeri korunmaz. Oluşturulan yanıtta gizlemek istediğiniz özel özelliklere sahip bir erişim jetonu oluşturduğunuzu varsayalım. display=false ayarlandığında, bu hedefe ulaşılır. Bununla birlikte, daha sonra yenileme jetonu kullanılarak yeni bir erişim jetonu oluşturulursa erişim jetonundaki orijinal özel özellikler, yenileme jetonu yanıtında gösterilir. Bunun nedeni Edge'in, erişim jetonu oluşturma politikasında display özelliğinin başlangıçta false olarak ayarlandığını hatırlamamasıdır. Özel özellik, erişim jetonunun meta verilerinin yalnızca bir parçasıdır.

Bir yetkilendirme koduna özel özellikler eklerseniz aynı davranışı görürsünüz. Bu kod kullanılarak bir erişim jetonu oluşturulduğunda bu özel özellikler, erişim jetonu yanıtında gösterilir. Bu beklediğiniz davranış olmayabilir.

Bu durumlarda özel özellikleri gizlemek için şu seçenekleri kullanabilirsiniz:

  • Yenileme jetonu politikasındaki özel özellikleri açıkça sıfırlayın ve görüntülenmelerini "false" (yanlış) değerine ayarlayın. Bu durumda, GetOAuthV2Info politikasını kullanarak orijinal erişim jetonundan orijinal özel değerleri almanız gerekebilir.
  • Yanıtta görmek istemediğiniz özel özellikleri manuel olarak çıkarmak için işleme sonrası JavaScript politikası kullanın.

Jetonları ve Yetkilendirme Kodlarını Özelleştirme konusuna da bakın.

Varsayılan:

N/A

Bulunma:

İsteğe bağlı

Geçerli değerler:
  • name -Özellik adı
  • ref - Özelliğin değeri. Bir akış değişkeninden gelebilir.
  • display - (İsteğe bağlı) Özel özelliklerin yanıtta görünüp görünmeyeceğini belirtmenizi sağlar. true ise yanıtta özel özellikler görünür (GenerateResponse de etkinse). false ise özel özellikler yanıta dahil edilmez. true, varsayılan değerdir. Yanıtta özel özellikleri görüntüleme veya gizleme konusuna bakın.
İzin türleriyle kullanılır:
  • authorization_code
  • kapalı
  • şifre
  • client_credentials
  • refresh_token
  • GenerateAuthorizationCode işlemiyle de kullanılabilir.

<ClientId> öğesi

<ClientId>request.formparam.client_id</ClientId>

Bazı durumlarda istemci uygulamasının, istemci kimliğini yetkilendirme sunucusuna göndermesi gerekir. Bu öğe, Edge'in istemci kimliğini nerede araması gerektiğini belirtmenizi sağlar. Ayarlayabileceğiniz tek geçerli konum, varsayılan konum olan request.formparam.client_id akış değişkenidir. ClientId değişkeninin başka bir değişkene ayarlanması desteklenmez. Erişim jetonları ve yetkilendirme kodları isteme bölümünü de inceleyin.

Varsayılan:

request.formparam.client_id (istek gövdesinde belirtilmiş ve x-www-form-url ile kodlanmış bir URL)

Bulunma:

İsteğe bağlı

Tür: Dize
Geçerli değerler: Akış değişkeni: request.formparam.client_id
İzin türleriyle kullanılır:
  • authorization_code
  • şifre
  • kapalı
  • client_credentials

GenerateAuthorizationCode işlemiyle de kullanılabilir.

<Code> öğesi

<Code>request.queryparam.code</Code>

Yetkilendirme izni türü akışında, istemcinin yetkilendirme sunucusuna (Apigee Edge) bir yetkilendirme kodu göndermesi gerekir. Bu öğe, Edge'in yetkilendirme kodunu nerede araması gerektiğini belirlemenizi sağlar. Örneğin, sorgu parametresi, HTTP üst bilgisi veya form parametresi (varsayılan) olarak gönderilebilir.

request.queryparam.auth_code değişkeni, yetkilendirme kodunun bir sorgu parametresi olarak (örneğin, ?auth_code=AfGlvs9) olması gerektiğini belirtir. Örneğin, bir HTTP üst bilgisinde yetkilendirme kodunu zorunlu kılmak için bu değeri request.header.auth_code olarak ayarlayın. Erişim jetonları ve yetkilendirme kodları isteme bölümünü de inceleyin.

Varsayılan:

request.formparam.code (istek gövdesinde kodlanan ve belirtilen bir x-www-form-url)

Bulunma:

isteğe bağlı

Tür: Dize
Geçerli değerler: Çalışma zamanında politika tarafından erişilebilen tüm akış değişkenleri
İzin türleriyle kullanılır: authorization_code

<expirationIn> öğesi

<ExpiresIn>10000</ExpiresIn> 

Erişim jetonlarının ve yetkilendirme kodlarının süre sonunu milisaniye cinsinden zorunlu kılar. (Yenileme jetonları için <RefreshTokenExpiresIn> kullanın.) Geçerlilik süresi değeri, sistem tarafından oluşturulan bir değere ek olarak <ExpiresIn> değeridir. <ExpiresIn>, -1 olarak ayarlanırsa jetonun veya kodun süresi maksimum OAuth erişim jetonunun sona ermesine göre dolar. <ExpiresIn> belirtilmezse sistem, sistem düzeyinde yapılandırılmış varsayılan bir değeri uygular.

Geçerlilik süresi, çalışma zamanında sabit kodlanmış bir varsayılan değer kullanılarak veya bir akış değişkenine referans vererek de ayarlanabilir. Örneğin, anahtar/değer eşlemesinde jeton geçerlilik bitiş değerini depolayabilir, jetonu alabilir, bir değişkene atayabilir ve politikada bu değere referans verebilirsiniz. Örneğin, kvm.oauth.expires_in.

Herkese Açık Bulut İçin Apigee Edge sayesinde Edge, varlıklara erişildikten sonra aşağıdaki varlıkları en az 180 saniye boyunca önbellekte tutar.

  • OAuth erişim jetonları. Bu, iptal edilen bir jetonun önbellek sınırının süresi dolana kadar üç dakika kadar daha başarılı olmaya devam edebileceği anlamına gelir.
  • Anahtar Yönetim Hizmeti (KMS) varlıkları (Uygulamalar, Geliştiriciler, API Ürünleri).
  • OAuth jetonları ve KMS varlıklarındaki özel özellikler.

Aşağıdaki dize, bir akış değişkeni ve varsayılan değer de belirtir. Akış değişkeni değerinin, belirtilen varsayılan değere göre öncelikli olduğunu unutmayın.

<ExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</ExpiresIn>

Edge, oluşturulduktan sonra bir jetonun süresinin dolmasının zorunlu kılınacağı bir yöntem desteklemez. Jetonun geçerlilik süresinin sona ermesini zorunlu kılmanız gerekiyorsa (örneğin, bir koşul doğrultusunda) olası bir çözüm bu Apigee Topluluk gönderisinde açıklanmıştır.

Varsayılan olarak, süresi dolmuş erişim jetonları geçerlilik süresi dolduktan 3 gün sonra otomatik olarak Apigee Edge sisteminden silinir. Erişim jetonlarını kalıcı olarak silme konusuna da bakın

Private Cloud: Private Cloud kurulumunda varsayılan değer conf_keymanagement_oauth_auth_code_expiry_time_in_millis özelliği tarafından belirlenir. Bu özelliği ayarlamak için:

  1. message-processor.properties dosyasını bir düzenleyicide açın. Dosya mevcut değilse oluşturun:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Mülkü istediğiniz gibi ayarlayın:
    conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
  3. Özellikler dosyasının "Apigee" kullanıcısına ait olduğundan emin olun:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Message Processor'ı yeniden başlatın.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Varsayılan:

Belirtilmezse sistem, sistem düzeyinde yapılandırılmış varsayılan bir değeri uygular.

Bulunma:

İsteğe bağlı

Tür: Tamsayı
Geçerli değerler:
İzin türleriyle kullanılır:
  • authorization_code
  • kapalı
  • şifre
  • client_credentials
  • refresh_token

GenerateAuthorizationCode işlemiyle de kullanılır.

<ExternalAccessToken> öğesi

<ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken>

Apigee Edge'e harici erişim jetonunu (Apigee Edge tarafından oluşturulmayan bir erişim jetonu) nerede bulacağını bildirir.

request.queryparam.external_access_token değişkeni, harici erişim jetonunun bir sorgu parametresi olarak (örneğin, ?external_access_token=12345678) olması gerektiğini belirtir. Örneğin, bir HTTP üst bilgisinde harici erişim jetonunu zorunlu kılmak için bu değeri request.header.external_access_token olarak ayarlayın. Üçüncü Taraf OAuth Jetonlarını Kullanma başlıklı makaleyi de inceleyin.

<ExternalAuthorization> öğesi

<ExternalAuthorization>true</ExternalAuthorization>

Bu öğe false (yanlış) değerine ayarlanırsa veya mevcut değilse Edge, client_id ve client_secret değerlerini normalde Apigee Edge yetkilendirme deposuna göre doğrular. Üçüncü taraf OAuth jetonlarıyla çalışmak istediğinizde bu öğeyi kullanın. Bu öğenin kullanımıyla ilgili ayrıntılar için Üçüncü Taraf OAuth Jetonlarını Kullanma bölümüne bakın.

Varsayılan:

false

Bulunma:

İsteğe bağlı

Tür: Boole
Geçerli değerler: doğru veya yanlış
İzin türleriyle kullanılır:
  • authorization_code
  • şifre
  • client_credentials

<ExternalAuthorizationCode> öğesi

<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>

Apigee Edge'e harici kimlik doğrulama kodunun (Apigee Edge tarafından oluşturulmayan kimlik doğrulama kodu) nerede bulunacağını bildirir.

request.queryparam.external_auth_code değişkeni, harici yetkilendirme kodunun bir sorgu parametresi olarak (örneğin, ?external_auth_code=12345678) olması gerektiğini belirtir. Örneğin, bir HTTP üst bilgisinde harici kimlik doğrulama kodunu zorunlu kılmak için bu değeri request.header.external_auth_code olarak ayarlayın. Üçüncü Taraf OAuth Jetonlarını Kullanma başlıklı makaleyi de inceleyin.

<ExternalYenileToken> öğesi

<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>

Apigee Edge'e harici yenileme jetonunu (Apigee Edge tarafından oluşturulmayan bir yenileme jetonu) nerede bulacağını bildirir.

request.queryparam.external_refresh_token değişkeni, harici yenileme jetonunun bir sorgu parametresi olarak (örneğin, ?external_refresh_token=12345678) olması gerektiğini belirtir. Örneğin, bir HTTP başlığında harici yenileme jetonunu zorunlu kılmak için bu değeri request.header.external_refresh_token olarak ayarlayın. Üçüncü Taraf OAuth Jetonlarını Kullanma başlıklı makaleyi de inceleyin.

<GenerateResponse> öğesi

<GenerateResponse enabled='true'/>

true değerine ayarlanırsa politika bir yanıt oluşturur ve döndürür. Örneğin, GenerateAccessToken için yanıt şöyle olabilir:

{
  "issued_at" : "1467841035013",
  "scope" : "read",
  "application_name" : "e31b8d06-d538-4f6b-9fe3-8796c11dc930",
  "refresh_token_issued_at" : "1467841035013",
  "status" : "approved",
  "refresh_token_status" : "approved",
  "api_product_list" : "[Product1, nhl_product]",
  "expires_in" : "1799",
  "developer.email" : "edward@slalom.org",
  "token_type" : "BearerToken",
  "refresh_token" : "rVSmm3QaNa0xBVFbUISz1NZI15akvgLJ",
  "client_id" : "Adfsdvoc7KX5Gezz9le745UEql5dDmj",
  "access_token" : "AnoHsh2oZ6EFWF4h0KrA0gC5og3a",
  "organization_name" : "cerruti",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

false ise yanıt gönderilmez. Bunun yerine, bir dizi akış değişkeni politikanın işleviyle ilgili değerlerle doldurulur. Örneğin, oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code adlı bir akış değişkeni, yeni oluşturulan yetkilendirme koduyla doldurulur. expires_in değerinin yanıtta saniye olarak ifade edildiğini unutmayın.

Varsayılan:

false

Bulunma:

İsteğe bağlı

Tür: dize
Geçerli değerler: doğru veya yanlış
İzin türleriyle kullanılır:
  • kapalı
  • şifre
  • client_credentials
  • refresh_token
  • GenerateAuthorizationCode işlemiyle de kullanılabilir.

<GenerateErrorResponse> öğesi

<GenerateErrorResponse enabled='true'/>

true değerine ayarlanırsa ContinueOnError özelliği doğru değerine ayarlanırsa politika bir yanıt oluşturur ve döndürür. false ise (varsayılan) yanıt gönderilmez. Bunun yerine, bir dizi akış değişkeni politikanın işleviyle ilgili değerlerle doldurulur.

Varsayılan:

false

Bulunma:

İsteğe bağlı

Tür: dize
Geçerli değerler: doğru veya yanlış
İzin türleriyle kullanılır:
  • kapalı
  • şifre
  • client_credentials
  • refresh_token
  • GenerateAuthorizationCode işlemiyle de kullanılabilir.

<GrantType>

<GrantType>request.queryparam.grant_type</GrantType>

Politikaya, bir istekte iletilen izin türü parametresinin nerede bulunacağını bildirir. OAuth 2.0 spesifikasyonu uyarınca, erişim jetonu ve yetkilendirme kodu istekleriyle birlikte izin türü sağlanmalıdır. Değişken bir başlık, sorgu parametresi veya form parametresi (varsayılan) olabilir.

Örneğin request.queryparam.grant_type, Şifre'nin bir sorgu parametresi olarak mevcut olması gerektiğini belirtir (örneğin, ?grant_type=password). Örneğin, bir HTTP başlığında izin türünü zorunlu kılmak için bu değeri request.header.grant_type olarak ayarlayın. Erişim jetonları ve yetkilendirme kodları isteme bölümünü de inceleyin.

Varsayılan:

request.formparam.grant_type (istek gövdesinde kodlanmış ve belirtilen bir x-www-form-url)

Bulunma:

İsteğe bağlı

Tür: dize
Geçerli değerler: Yukarıda açıklandığı gibi bir değişken.
İzin türleriyle kullanılır:
  • authorization_code
  • şifre
  • kapalı
  • client_credentials
  • refresh_token

<İşlem> öğesi

<Operation>GenerateAuthorizationCode</Operation>

Politika tarafından yürütülen OAuth 2.0 işlemi.

Varsayılan:

<Operation> belirtilmezse Edge, <SupportedGrantTypes> listesine bakar. Yalnızca bu bağış türlerindeki işlemler başarılı olur. Diğer bir deyişle, <SupportedGrantTypes> listesinde bir <GrantType> belirtirseniz <Operation> öğesini atlayabilirsiniz. <Operation> veya <SupportedGrantTypes> belirtilmezse varsayılan izin türü yetkilendirme_kodu olur. Yani yetkilendirme_code izin türü istekleri başarılı olur ancak diğer tüm istekler başarısız olur.

Bulunma:

İsteğe bağlı

Tür: Dize
Geçerli değerler:

<PassWord> öğesi

<PassWord>request.queryparam.password</PassWord>

Bu öğe, yalnızca şifre izin türü ile kullanılır. Şifre erişim türü, kullanıcı kimlik bilgilerinin (şifre ve kullanıcı adı) OAuthV2 politikası için kullanılabilir hale getirilmesi gerekir. <PassWord> ve <UserName> öğeleri, Edge'in bu değerleri bulabileceği değişkenleri belirtmek için kullanılır. Bu öğeler belirtilmezse politika, değerleri (varsayılan olarak) username ve password adlı form parametrelerinde bulmayı bekler. Değerler bulunamazsa politika hata verir. Kimlik bilgilerini içeren herhangi bir akış değişkenine referans vermek için <PassWord> ve <UserName> öğelerini kullanabilirsiniz.

Örneğin, sorgu parametresi kullanarak bir jeton isteği içinde şifreyi iletebilir ve öğeyi şu şekilde ayarlayabilirsiniz: <PassWord>request.queryparam.password</PassWord>. Bir HTTP üst bilgisinde şifre kullanımını zorunlu kılmak için bu değeri request.header.password olarak ayarlayın.

OAuthV2 politikası, bu kimlik bilgisi değerleriyle başka bir şey yapmaz. Edge yalnızca mevcut değerleri doğrular. Jeton oluşturma politikası uygulanmadan önce değerler isteğinin alınması ve bir kimlik sağlayıcıya gönderilmesi API geliştiricisinin sorumluluğundadır.

Erişim jetonları ve yetkilendirme kodları isteme bölümünü de inceleyin.

Varsayılan:

request.formparam.password (istek gövdesinde kodlanan ve belirtilen bir x-www-form-url)

Bulunma:

İsteğe bağlı

Tür: Dize
Geçerli değerler: Çalışma zamanında politika için kullanılabilen herhangi bir akış değişkeni.
İzin türleriyle kullanılır: şifre

<RedirectUri> öğesi

<RedirectUri>request.queryparam.redirect_uri</RedirectUri>

Edge'in istekte redirect_uri parametresini nerede araması gerektiğini belirtir.

Yönlendirme URI'leri hakkında

Yönlendirme URI'leri, yetkilendirme kodu ve örtülü izin türleriyle kullanılır. Yönlendirme URI'si, yetkilendirme sunucusuna (Edge) yetkilendirme kodunun (yetkilendirme kodu izin türü için) veya erişim jetonunun (örtülü izin türü için) gönderileceği yeri bildirir. Bu parametrenin ne zaman gerekli olduğunu, ne zaman isteğe bağlı olduğunu ve nasıl kullanıldığını anlamak önemlidir:

  • (gerekli) İsteğin istemci anahtarlarıyla ilişkili geliştirici uygulamasında bir Geri Çağırma URL'si kayıtlıysa ve istekte redirect_uri mevcutsa ikisi tam olarak eşleşmelidir. Eşleşmezlerse bir hata döndürülür. Edge'de geliştirici uygulamalarını kaydetme ve Geri Çağırma URL'si belirtme hakkında bilgi için Uygulamaları kaydetme ve API anahtarlarını yönetme konusuna bakın.

  • (İsteğe bağlı) Bir Geri Çağırma URL'si kayıtlıysa ve redirect_uri istekte bulunmuyorsa Edge, kayıtlı Geri Çağırma URL'sine yönlendirme yapar.
  • (gerekli) Bir Geri Çağırma URL'si kayıtlı değilse redirect_uri gereklidir. Bu durumda, Edge'in HERHANGİ BİR URL'yi kabul edeceğini unutmayın. Bu durum güvenlik sorunu oluşturabilir, ve bu nedenle yalnızca güvenilir istemci uygulamalarıyla kullanılmalıdır. İstemci uygulamaları güvenilir değilse en iyi uygulama her zaman bir Geri Arama URL'sinin kaydedilmesini zorunlu kılmaktır.

Bu parametreyi bir sorgu parametresinde veya başlıkta gönderebilirsiniz. request.queryparam.redirect_uri değişkeni, RedirectUri'nin bir sorgu parametresi olarak (örneğin, ?redirect_uri=login.myapp.com) olması gerektiğini belirtir. Örneğin, bir HTTP üst bilgisinde RedirectUri'yi zorunlu kılmak için bu değeri request.header.redirect_uri olarak ayarlayın. Erişim jetonları ve yetkilendirme kodları isteme bölümünü de inceleyin.

Varsayılan:

request.formparam.redirect_uri (istek gövdesinde belirtilmiş ve x-www-form-url olarak kodlanmış bir URL)

Bulunma:

İsteğe bağlı

Tür: Dize
Geçerli değerler: Çalışma zamanında politikada erişilebilen tüm akış değişkenleri
İzin türleriyle kullanılır:
  • authorization_code
  • kapalı

GenerateAuthorizationCode işlemiyle de kullanılır.

<YenileToken> öğesi

<RefreshToken>request.queryparam.refreshtoken</RefreshToken>

Yenileme jetonu kullanarak erişim jetonu isterken istekte yenileme jetonunu sağlamanız gerekir. Bu öğe, Edge'in yenileme jetonunu nerede araması gerektiğini belirlemenizi sağlar. Örneğin; sorgu parametresi, HTTP üst bilgisi veya form parametresi (varsayılan) olarak gönderilebilir.

request.queryparam.refreshtoken değişkeni, yenileme jetonunun bir sorgu parametresi olarak (örneğin, ?refresh_token=login.myapp.com) olması gerektiğini belirtir. Örneğin, HTTP başlığında YenileToken özelliğini zorunlu kılmak için bu değeri request.header.refresh_token olarak ayarlayın. Erişim jetonları ve yetkilendirme kodları isteme bölümünü de inceleyin.

Varsayılan:

request.formparam.refresh_token (istek gövdesinde kodlanmış ve belirtilen bir x-www-form-url)

Bulunma:

İsteğe bağlı

Tür: Dize
Geçerli değerler: Çalışma zamanında politikada erişilebilen tüm akış değişkenleri
İzin türleriyle kullanılır:
  • refresh_token

<YenileTokenExpirationIn> öğesi

<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>

Yenileme jetonlarının süre sonunu milisaniye cinsinden zorunlu kılar. Geçerlilik süresi değeri, sistem tarafından oluşturulan değer ile <RefreshTokenExpiresIn> değeridir. <RefreshTokenExpiresIn>, -1 olarak ayarlanırsa yenileme jetonunun süresi, maksimum OAuth yenileme jetonunun sona ermesinden sonra sona erer. <RefreshTokenExpiresIn> belirtilmezse varsayılan olarak süre sonu süresiz olur.

Geçerlilik süresi, çalışma zamanında sabit kodlanmış bir varsayılan değer kullanılarak veya bir akış değişkenine referans vererek de ayarlanabilir. Örneğin, anahtar/değer eşlemesinde jeton geçerlilik bitiş değerini depolayabilir, jetonu alabilir, bir değişkene atayabilir ve politikada bu değere referans verebilirsiniz. Örneğin, kvm.oauth.expires_in.

Aşağıdaki dize, bir akış değişkeni ve varsayılan değer de belirtir. Akış değişkeni değerinin, belirtilen varsayılan değere göre öncelikli olduğunu unutmayın.

<RefreshTokenExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</RefreshTokenExpiresIn>

Private Cloud: Private Cloud kurulumunda varsayılan değer conf_keymanagement_oauth_refresh_token_expiry_time_in_millis özelliği tarafından belirlenir. Bu özelliği ayarlamak için:

  1. message-processor.properties dosyasını bir düzenleyicide açın. Dosya mevcut değilse oluşturun:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Mülkü istediğiniz gibi ayarlayın:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
  3. Özellikler dosyasının "Apigee" kullanıcısına ait olduğundan emin olun:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Message Processor'ı yeniden başlatın.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Varsayılan:

Belirtilmezse sistem, sistem düzeyinde yapılandırılmış varsayılan bir değeri uygular.

Bulunma:

İsteğe bağlı

Tür: Tamsayı
Geçerli değerler:
İzin türleriyle kullanılır:
  • authorization_code
  • şifre
  • refresh_token

<ResponseType> öğesi

<ResponseType>request.queryparam.response_type</ResponseType>

Bu öğe, Edge'e istemci uygulamasının hangi izin türünü istediğini bildirir. Yalnızca yetkilendirme kodu ve dolaylı izin türü akışlarla kullanılır.

Varsayılan olarak Edge, response_type sorgu parametresinde yanıt türü değerini arar. Bu varsayılan davranışı geçersiz kılmak isterseniz yanıt türü değerini içeren bir akış değişkeni yapılandırmak için <ResponseType> öğesini kullanın. Örneğin, bu öğeyi request.header.response_type olarak ayarlarsanız Edge, istek başlığında iletilecek yanıt türünü arar. Erişim jetonları ve yetkilendirme kodları isteme bölümünü de inceleyin.

Varsayılan:

request.formparam.Response_type (istek gövdesinde belirtilen ve x-www-form-url olarak kodlanmış bir URL)

Bulunma:

İsteğe bağlı. Varsayılan davranışı geçersiz kılmak istiyorsanız bu öğeyi kullanın.

Tür: Dize
Geçerli değerler: code (yetkilendirme kodu izin türü için) veya token (örtülü izin türü için)
İzin türleriyle kullanılır:
  • kapalı
  • GenerateAuthorizationCode işlemiyle de kullanılır.

<ReuserefreshToken> öğesi

<ReuseRefreshToken>true</ReuseRefreshToken>

true olarak ayarlandığında mevcut yenileme jetonu, süresi dolana kadar yeniden kullanılır. false ise geçerli bir yenileme jetonu sunulduğunda Apigee Edge tarafından yeni bir yenileme jetonu verilir.

Varsayılan:

false

Bulunma:

isteğe bağlı

Tür: boolean
Geçerli değerler:

true veya false

İzin türüyle kullanılır:
  • refresh_token

<Scope> öğesi

<Scope>request.queryparam.scope</Scope>

Bu öğe, GenerateAccessToken veya GenerateAuthorizationCode politikalarından birinde bulunuyorsa jetonu veya kodu verecek kapsamları belirtmek için kullanılır. Bu değerler genellikle bir istemci uygulamasından yapılan istekte politikaya iletilir. Öğeyi bir akış değişkeni alacak şekilde yapılandırabilirsiniz. Bu sayede kapsamların istekte nasıl iletileceğini seçebilirsiniz. Aşağıdaki örnekte request.queryparam.scope, kapsamın bir sorgu parametresi olarak (örneğin, ?scope=READ) olması gerektiğini belirtir. Örneğin, bir HTTP başlığında kapsamı zorunlu kılmak için bu değeri request.header.scope olarak ayarlayın.

Bu öğe bir "VerifyAccessToken" politikasında görünüyorsa politikanın hangi kapsamları uygulaması gerektiğini belirtmek için kullanılır. Bu politika türünde, değerin "sabit kodlu" bir kapsam adı olması gerekir. Değişkenler kullanamazsınız. Örneğin:

<Scope>A B</Scope>

Ayrıca, OAuth2 kapsamlarıyla çalışma ve Erişim jetonları ve yetkilendirme kodları isteme bölümlerine de göz atın.

Varsayılan:

Kapsam yok

Bulunma:

İsteğe bağlı

Tür: Dize
Geçerli değerler:

Oluştur* politikalarıyla kullanılırsa bir akış değişkenidir.

DoğrulamaErişimToken ile kullanılıyorsa kapsam adlarının (dizeler) boşlukla ayrılmış listesi.

İzin türleriyle kullanılır:
  • authorization_code
  • kapalı
  • şifre
  • client_credentials
  • GenerateAuthorizationCode ve ValidAccessToken işlemleriyle de kullanılabilir.

<State> öğesi

<State>request.queryparam.state</State>

İstemci uygulamasının durum bilgilerini yetkilendirme sunucusuna göndermesi gerektiğinde bu öğe, Edge'in durum değerlerini nerede araması gerektiğini belirtmenizi sağlar. Örneğin, bir sorgu parametresi olarak veya bir HTTP üst bilgisi olarak gönderilebilir. Durum değeri genellikle CSRF saldırılarını önlemek için bir güvenlik önlemi olarak kullanılır.

Örneğin request.queryparam.state, durumun bir sorgu parametresi olarak mevcut olması gerektiğini belirtir (örneğin, ?state=HjoiuKJH32). Örneğin, bir HTTP üst bilgisinde durumu zorunlu kılmak için bu değeri request.header.state olarak ayarlayın. Erişim jetonları ve yetkilendirme kodları isteme bölümünü de inceleyin.

Varsayılan:

Durum yok

Bulunma:

İsteğe bağlı

Tür: Dize
Geçerli değerler: Çalışma zamanında politika tarafından erişilebilen tüm akış değişkenleri
İzin türleriyle kullanılır:
  • Tümü
  • GenerateAuthorizationCode işlemiyle de kullanılabilir

<StoreToken> öğesi

 <StoreToken>true</StoreToken> 

<ExternalAuthorization> öğesi true olduğunda bu öğeyi true olarak ayarlayın. <StoreToken> öğesi, Apigee Edge'e harici erişim jetonunu depolamasını bildirir. Aksi takdirde ayarlanmaz.

Varsayılan:

false

Bulunma:

İsteğe bağlı

Tür: Boole
Geçerli değerler: doğru veya yanlış
İzin türleriyle kullanılır:
  • authorization_code
  • şifre
  • client_credentials

<SupportedGrantTypes>/<GrantType> öğesi

<SupportedGrantTypes>
    <GrantType>authorization_code</GrantType>
    <GrantType>client_credentials</GrantType>
    <GrantType>implicit</GrantType>
    <GrantType>password</GrantType>
</SupportedGrantTypes>

Apigee Edge'de OAuth jetonu uç noktasının desteklediği izin türlerini belirtir. Bir uç nokta, birden fazla izin türünü destekleyebilir. Yani, tek bir uç nokta, birden fazla izin türü için erişim jetonları dağıtmak üzere yapılandırılabilir. Uç noktalar hakkında daha fazla bilgi için OAuth uç noktalarını anlama başlıklı makaleyi inceleyin. İzin türü, jeton isteklerinde bir grant_type parametresinde iletilir.

Desteklenen bir izin türü belirtilmemişse yalnızca authorization_code ve implicit izin türleri kullanılabilir. <GrantType> öğesine de bakın (bu üst düzey öğe, Apigee Edge'in istemci isteğinde geçirilen grant_type parametresini nasıl araması gerektiğini belirtmek için kullanılır.) Edge, grant_type parametre değerinin desteklenen izin türlerinden biriyle eşleştiğinden emin olur).

Varsayılan:

yetkilendirme _kodu ve örtülü

Bulunma:

Gerekli

Tür: Dize
Geçerli değerler:
  • client_credentials
  • authorization_code
  • şifre
  • kapalı

<Tokens>/<Token> öğesi

ValidateToken ve InValidateToken işlemleriyle birlikte kullanılır. Erişim jetonlarını onaylama ve iptal etme konusuna da bakın. <Token> öğesi, iptal edilecek jetonun kaynağını tanımlayan akış değişkenini tanımlar. Örneğin, geliştiricilerin erişim jetonlarını access_token adlı sorgu parametreleri olarak göndermeleri bekleniyorsa request.queryparam.access_token parametresini kullanın.

<UserName> öğesi

<UserName>request.queryparam.user_name</UserName>

Bu öğe, yalnızca şifre izin türü ile kullanılır. Şifre erişim türü, kullanıcı kimlik bilgilerinin (şifre ve kullanıcı adı) OAuthV2 politikası için kullanılabilir hale getirilmesi gerekir. <PassWord> ve <UserName> öğeleri, Edge'in bu değerleri bulabileceği değişkenleri belirtmek için kullanılır. Bu öğeler belirtilmezse politika, değerleri (varsayılan olarak) username ve password adlı form parametrelerinde bulmayı bekler. Değerler bulunamazsa politika hata verir. Kimlik bilgilerini içeren herhangi bir akış değişkenine referans vermek için <PassWord> ve <UserName> öğelerini kullanabilirsiniz.

Örneğin, kullanıcı adını bir sorgu parametresinde iletebilir ve <UserName> öğesini şu şekilde ayarlayabilirsiniz: <UserName>request.queryparam.username</UserName>.Kullanıcı adının HTTP başlığında zorunlu kılınması için bu değeri request.header.username olarak ayarlayın.

OAuthV2 politikası, bu kimlik bilgisi değerleriyle başka bir şey yapmaz. Edge yalnızca mevcut değerleri doğrular. Jeton oluşturma politikası uygulanmadan önce değerler isteğinin alınması ve bir kimlik sağlayıcıya gönderilmesi API geliştiricisinin sorumluluğundadır.

Erişim jetonları ve yetkilendirme kodları isteme bölümünü de inceleyin.

Varsayılan:

request.formparam.username (istek gövdesinde belirtilmiş ve x-www-form-url ile kodlanmış bir URL)

Bulunma:

İsteğe bağlı

Tür: Dize
Geçerli değerler: Herhangi bir değişken ayarı.
İzin türleriyle kullanılır: şifre

Erişim jetonlarını doğrulama

API proxy'si için jeton uç noktası oluşturulduktan sonra, korunan kaynağı gösteren Akışa VerifyAccessToken işlemini belirten ilgili bir OAuthV2 politikası eklenir.

Örneğin, bir API'ye yapılan tüm isteklerin yetkilendirildiğinden emin olmak için aşağıdaki politika, erişim jetonu doğrulamasını zorunlu kılar:

<OAuthV2 name="VerifyOAuthAccessToken">
  <Operation>VerifyAccessToken</Operation>
</OAuthV2>

Politika, korunacak API kaynağına eklenmiş. Bir API'ye yapılan tüm isteklerin doğrulandığından emin olmak için politikayı aşağıdaki şekilde ProxyEndpoint isteği PreFlow'a ekleyin:

<PreFlow>
  <Request>
    <Step><Name>VerifyOAuthAccessToken</Name></Step>
  </Request>
</PreFlow>

Aşağıdaki isteğe bağlı öğeler, VerificationAccessToken işleminin varsayılan ayarlarını geçersiz kılmak için kullanılabilir.

Ad Açıklama
Kapsam

Boşluklarla sınırlı bir kapsam listesi. Erişim jetonunda, listelenen kapsamlardan en az biri varsa doğrulama işlemi başarılı olur. Örneğin, aşağıdaki politika, listelenen kapsamlardan en az birini içerdiğinden emin olmak için erişim jetonunu kontrol eder. READ veya WRITE mevcutsa doğrulama başarılı olur.

<OAuthV2 name="ValidateOauthScopePolicy">
  <Operation>VerifyAccessToken</Operation>
  <Scope>READ WRITE</Scope>
</OAuthV2>
AccessToken Erişim jetonunun bulunması beklenen değişken. Örneğin, request.queryparam.accesstoken. Varsayılan olarak, erişim jetonunun uygulama tarafından OAuth 2.0 spesifikasyonuna göre Yetkilendirme HTTP üstbilgisinde sunulması beklenir. Erişim jetonunun sorgu parametresi veya Yetkilendirme dışında ada sahip bir HTTP üst bilgisi gibi standart olmayan bir konumda sunulması bekleniyorsa bu ayarı kullanın.

Ayrıca, Erişim jetonlarını doğrulama ve Erişim jetonları ve yetkilendirme kodları isteme bölümlerine de göz atın.

İstek değişkeni konumlarını belirtme

Politika, her bir izin türü için konum veya istek mesajlarında gerekli bilgiler hakkında varsayımlarda bulunur. Bu varsayımlar OAuth 2.0 spesifikasyonunu temel almaktadır. Uygulamalarınızın OAuth 2.0 spesifikasyonundan sapması gerekiyorsa her parametre için beklenen konumları belirtebilirsiniz. Örneğin, bir yetkilendirme kodunu işlerken yetkilendirme kodunun konumunu, istemci kimliğini, yönlendirme URI'sini ve kapsamı belirtebilirsiniz. Bunlar HTTP üst bilgileri, sorgu parametreleri veya form parametreleri olarak belirtilebilir.

Aşağıdaki örnekte, gerekli yetkilendirme kodu parametrelerinin konumunu HTTP üst bilgileri olarak nasıl belirtebileceğiniz gösterilmektedir:

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.header.client_id</ClientId>
  <RedirectUri>request.header.redirect_uri</RedirectUri>
  <Scope>request.header.scope</Scope>
  ...

Müşteri uygulama tabanınızı desteklemek için gerekirse başlıklar ve sorgu parametrelerini karıştırıp eşleştirebilirsiniz:

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.queryparam.client_id</ClientId>
  <RedirectUri>request.queryparam.redirect_uri</RedirectUri>
  <Scope>request.queryparam.scope</Scope>
  ...

Parametre başına yalnızca bir konum yapılandırılabilir.

Akış değişkenleri

Bu tabloda tanımlanan akış değişkenleri, ilgili OAuth politikaları yürütüldüğünde doldurulur ve bu nedenle API proxy akışında çalışan diğer politikalar veya uygulamalar tarafından kullanılabilir.

DoğrulamaErişim Jetonu işlemi

VerificationAccessToken işlemi yürütülür ve proxy'nin yürütme bağlamında çok sayıda akış değişkeni doldurulur. Bu değişkenler size erişim jetonu, geliştirici uygulaması, geliştirici ve şirket ile ilgili özellikler sunar. Örneğin, bu değişkenlerden herhangi birini okumak ve akışın sonraki aşamalarında gerekli olduğunda kullanmak için bir AtaticMessage veya JavaScript politikası kullanabilirsiniz. Bu değişkenler, hata ayıklama amacıyla da yararlı olabilir.

Jetona özel değişkenler

Değişkenler Açıklama
organization_name Proxy'nin yürütüldüğü kuruluşun adı.
developer.id Kayıtlı istemci uygulamasıyla ilişkilendirilmiş geliştiricinin kimliği.
developer.app.name Kayıtlı istemci uygulamasıyla ilişkilendirilmiş geliştiricinin adı.
client_id Kayıtlı istemci uygulamasının istemci kimliği.
grant_type İstekle ilişkili izin türü.
token_type İstekle ilişkili jeton türü.
access_token Doğrulanmakta olan erişim jetonu.
accesstoken.{custom_attribute} Erişim jetonunda adlandırılmış özel bir özellik.
issued_at Erişim jetonunun verildiği tarih, milisaniye cinsinden Unix sıfır zamanı cinsinden ifade edilir.
expires_in Erişim jetonunun geçerlilik süresi. Saniye cinsinden ifade edilir. ExpiresIn öğesi süre sonunu milisaniye cinsinden ayarlasa da jeton yanıtında ve akış değişkenlerinde değer saniye cinsinden ifade edilir.
status Erişim jetonunun durumu (ör. onaylandı veya iptal edildi).
scope Erişim jetonuyla ilişkili kapsam (varsa).
apiproduct.<custom_attribute_name> Kayıtlı istemci uygulamasıyla ilişkilendirilmiş API ürününün adlandırılmış özel özelliği.
apiproduct.name Kayıtlı istemci uygulamasıyla ilişkilendirilen API ürününün adı.
revoke_reason

(Yalnızca ApigeeHybrid) Erişim jetonunun neden iptal edildiğini belirtir.

Değer REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER veya TOKEN_REVOKED olabilir.

Uygulamaya özel değişkenler

Bu değişkenler, jetonla ilişkilendirilen Geliştirici Uygulaması ile ilgilidir.

Değişkenler Açıklama
app.name
app.id
app.accessType
app.callbackUrl
app.status onaylandı veya iptal edildi
app.scopes
app.appFamily
app.apiproducts
app.appParentStatus
app.appType Örneğin: Geliştirici
app.appParentId
app.created_by
app.created_at
app.last_modified_at
app.last_modified_by
app.{custom_attributes} Kayıtlı istemci uygulamasının adlandırılmış özel özelliği.

Geliştiriciye özel değişkenler

app.appType için "Şirket" değeri belirlenirse şirket özellikleri doldurulur. app.appType değeri "Geliştirici" ise geliştirici özellikleri doldurulur.

Değişkenler Açıklama
Geliştiriciye özel değişkenler
developer.id
developer.userName
developer.firstName
developer.lastName
developer.email
developer.status etkin veya etkin değil
developer.apps
developer.created_by
developer.created_at
developer.last_modified_at
developer.last_modified_by
developer.{custom_attributes} Geliştiricinin adlandırılmış özel özelliği.

Şirkete özel değişkenler

app.appType için "Şirket" değeri belirlenirse şirket özellikleri doldurulur. app.appType değeri "Geliştirici" ise geliştirici özellikleri doldurulur.

Değişkenler Açıklama
company.id
company.displayName
company.apps
company.appOwnerStatus
company.created_by
company.created_at
company.last_modified_at
company.last_modified_by
company.{custom_attributes} Şirketin adlandırılmış özel bir özelliği.

GenerateAuthorizationCode işlemi

Bu değişkenler, GenerateAuthorizationCode işlemi başarıyla yürütüldüğünde ayarlanır:

Önek: oauthv2authcode.{policy_name}.{variable_name}

Örnek: oauthv2authcode.GenerateCodePolicy.code

Değişken Açıklama
code Politika yürütüldüğünde oluşturulan yetkilendirme kodu.
redirect_uri Kayıtlı istemci uygulamasıyla ilişkilendirilen yönlendirme URI'si.
scope İstemci isteğinde iletilen isteğe bağlı OAuth kapsamı.
client_id İstemci isteğinde iletilen istemci kimliği.

GenerateAccessToken ve refreshAccessToken işlemleri

Bu değişkenler, GenerateAccessToken ve refreshAccessToken işlemleri başarıyla yürütüldüğünde ayarlanır. Yenileme jetonu değişkenlerinin, istemci kimlik bilgileri izin türü akışı için geçerli olmadığını unutmayın.

Önek: oauthv2accesstoken.{policy_name}.{variable_name}

Örnek: oauthv2accesstoken.GenerateTokenPolicy.access_token

Değişken adı Açıklama
access_token Oluşturulan erişim jetonu.
client_id Bu jetonla ilişkilendirilmiş geliştirici uygulamasının istemci kimliği.
expires_in Jetonun geçerlilik bitiş değeri. Ayrıntılar için <ExpiresIn> öğesine bakın. Yanıtta expires_in değerinin saniye olarak ifade edildiğini unutmayın.
scope Jeton için yapılandırılmış kullanılabilir kapsamların listesi. OAuth2 kapsamlarıyla çalışma başlıklı makaleyi inceleyin.
status approved veya revoked.
token_type BearerToken olarak ayarlandı.
developer.email Jetonla ilişkilendirilmiş geliştirici uygulamasının sahibi olan kayıtlı geliştiricinin e-posta adresi.
organization_name Proxy'nin yürütüldüğü kuruluş.
api_product_list Jetonun karşılık gelen geliştirici uygulamasıyla ilişkilendirilmiş ürünlerin listesi.
refresh_count
refresh_token Oluşturulan yenileme jetonu. İstemci kimlik bilgileri izin türü için yenileme jetonlarının oluşturulmadığını unutmayın.
refresh_token_expires_in Yenileme jetonunun saniye cinsinden kullanım süresi.
refresh_token_issued_at Bu zaman değeri, karşılık gelen 32 bit zaman damgası miktarının dize gösterimidir. Örneğin, "21 Ağustos 2013 19:16:47 UTC" zaman damgası değerine karşılık gelir. 1377112607413.
refresh_token_status approved veya revoked.

GenerateAccessTokenImplicitGrant

Bu değişkenler, örtülü izin türü akışı için GenerateAccessTokenImplicit işlemi başarıyla yürütüldüğünde ayarlanır.

Önek: oauthv2accesstoken.{policy_name}.{variable_name}

Örnek: oauthv2accesstoken.RefreshTokenPolicy.access_token

Değişken Açıklama
oauthv2accesstoken.access_token Politika yürütüldüğünde oluşturulan erişim jetonu.
oauthv2accesstoken.{policy_name}.expires_in Jetonun saniye cinsinden süre sonu değeri. Ayrıntılar için <ExpiresIn> öğesine bakın.

Hata referansı

Bu bölümde, bu politika bir hatayı tetiklediğinde Edge tarafından ayarlanan hata kodları ile hata mesajları ve döndürülen hata mesajları ile Edge tarafından ayarlanan hata değişkenleri açıklanmaktadır. Bu bilgiyi, hataları ele almak için hata kuralları geliştirip geliştirmediğinizi bilmeniz önemlidir. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler ve Hataları işleme bölümlerine bakın.

Çalışma zamanı hataları

Politika yürütüldüğünde bu hatalar ortaya çıkabilir.

Hata kodu HTTP durumu Neden Operasyonlar tarafından yapılan artış
steps.oauth.v2.access_token_expired 401 Erişim jetonunun süresi doldu.

VerificationAccessToken
InValidateToken

steps.oauth.v2.access_token_not_approved 401 Erişim jetonu iptal edildi. VerifyAccessToken
steps.oauth.v2.apiresource_doesnot_exist 401 İstenen kaynak, erişim jetonuyla ilişkilendirilmiş API ürünlerinden hiçbiri mevcut değil. VerifyAccessToken
steps.oauth.v2.FailedToResolveAccessToken 500 Politikanın, <AccessToken> öğesinde belirtilen bir değişkende erişim jetonu bulması bekleniyordu, ancak değişken çözümlenemedi. GenerateAccessToken
steps.oauth.v2.FailedToResolveAuthorizationCode 500 Politikanın <Code> öğesinde belirtilen bir değişkende yetkilendirme kodu bulması bekleniyordu, ancak değişken çözümlenemedi. GenerateAuthorizationCode
steps.oauth.v2.FailedToResolveClientId 500 Politikanın, <ClientId> öğesinde belirtilen bir değişkende İstemci Kimliği'ni bulması bekleniyordu ancak değişken çözümlenemedi. GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
YenileAccessToken
steps.oauth.v2.FailedToResolveRefreshToken 500 Politikanın <RefreshToken> öğesinde belirtilen bir değişkende yenileme jetonu bulması bekleniyordu, ancak değişken çözümlenemedi. RefreshAccessToken
steps.oauth.v2.FailedToResolveToken 500 Politikanın <Tokens> öğesinde belirtilen bir değişkende jeton bulması bekleniyordu, ancak değişken çözümlenemedi.

ValidateToken
In InvalidToken

steps.oauth.v2.InsufficientScope 403 İstekte sunulan erişim jetonunda, erişim jetonunu doğrulama politikasında belirtilen kapsamla eşleşmeyen bir kapsam var. Kapsam hakkında bilgi edinmek için OAuth2 kapsamlarıyla çalışma başlıklı makaleyi inceleyin. VerifyAccessToken
steps.oauth.v2.invalid_access_token 401 İstemciden gönderilen erişim jetonu geçersiz. VerifyAccessToken
steps.oauth.v2.invalid_client 401

Politikanın <GenerateResponse> özelliği true olarak ayarlandığında ve istekte gönderilen istemci kimliği geçersiz olduğunda bu hata adı döndürülür. Proxy'nizle ilişkilendirilmiş Geliştirici Uygulaması için doğru istemci anahtarı ve gizli anahtar değerlerini kullandığınızdan emin olun. Genellikle bu değerler Base64 kodlamalı Temel Yetkilendirme başlığı olarak gönderilir.

Not: Hem invalid_client hem de InvalidClientIdentifier adlarını yakalamak için mevcut hata kuralı koşullarını değiştirmeniz önerilir. Daha fazla bilgi ve bir örnek için 16.09.21 Sürüm Notları'na bakın.

GenerateAccessToken
refreshAccessToken
steps.oauth.v2.invalid_request 400 Bu hata adı, genellikle istekte gönderilen eksik veya yanlış parametreler gibi birden fazla farklı hata türü için kullanılır. <GenerateResponse>, false olarak ayarlanırsa hatayla ilgili ayrıntıları (hata adı ve nedeni gibi) almak için hata değişkenlerini (aşağıda açıklanmıştır) kullanın. GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
YenileAccessToken
steps.oauth.v2.InvalidAccessToken 401 Yetkilendirme başlığında "hamiline ait" kelimesi yok ve bu gereklidir. Örneğin: Authorization: Bearer your_access_token VerifyAccessToken
steps.oauth.v2.InvalidAPICallAsNo\
steps.oauth.v2.ApiProductMatchFound
401

API proxy'si, erişim jetonuyla ilişkilendirilmiş üründe yer almıyor.

İpuçları: Erişim jetonuyla ilişkilendirilen ürünün doğru yapılandırıldığından emin olun. Örneğin, kaynak yollarında joker karakterler kullanıyorsanız joker karakterlerin doğru kullanıldığından emin olun. Ayrıntılar için API ürünleri oluşturma bölümüne bakın.

Bu hatanın nedenleri hakkında daha fazla bilgi edinmek için bu Apigee Topluluk gönderisine de göz atın.

VerifyAccessToken
steps.oauth.v2.InvalidClientIdentifier 500

Politikanın <GenerateResponse> özelliği false olarak ayarlandığında ve istekte gönderilen istemci kimliği geçersiz olduğunda bu hata adı döndürülür. Proxy'nizle ilişkilendirilmiş Geliştirici Uygulaması için doğru istemci anahtarı ve gizli anahtar değerlerini kullandığınızdan emin olun. Genellikle bu değerler Base64 kodlu Temel Yetkilendirme başlığı olarak gönderilir.

Not: Bu durumda, bu hatanın adı eskiden invalid_client olarak adlandırılıyordu. Hem invalid_client hem de InvalidClientIdentifier adlarını yakalamak için mevcut hata kuralı koşullarını değiştirmeniz önerilir. Daha fazla bilgi ve bir örnek için 16.09.21 Sürüm Notları'na bakın.

GenerateAccessToken
refreshAccessToken

steps.oauth.v2.InvalidParameter 500 Politika bir erişim jetonu veya yetkilendirme kodu belirtmelidir (ikisini birden belirtemez). GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.InvalidTokenType 500 <Tokens>/<Token> öğesi, jeton türünü (örneğin, refreshtoken) belirtmenizi gerektirir. İstemci yanlış türü iletirse bu hata verilir. ValidateToken
In InvalidToken
steps.oauth.v2.MissingParameter 500 Yanıt türü token, ancak izin türü belirtilmedi. GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.UnSupportedGrantType 500

Müşteri, politika tarafından desteklenmeyen bir izin türü belirtti (<SupportedGrantTypes> öğesinde listelenmeyen).

Not: Şu anda, desteklenmeyen izin türü hatalarının doğru atılmamasına neden olan bir hata bulunmaktadır. Desteklenmeyen bir izin türü hatası oluşursa proxy, beklendiği gibi Hata Akışı'na girmez.

GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
YenileAccessToken

Dağıtım hataları

Bu hatalar, bu politikayı içeren bir proxy dağıttığınızda ortaya çıkabilir.

Hata adı Neden
InvalidValueForExpiresIn

<ExpiresIn> öğesi için geçerli değerler pozitif tam sayılar ve -1'dir.

InvalidValueForRefreshTokenExpiresIn <RefreshTokenExpiresIn> öğesi için geçerli değerler pozitif tam sayılar ve -1'dir.
InvalidGrantType <SupportedGrantTypes> öğesinde geçersiz bir izin türü belirtildi. Geçerli türlerin listesi için politika referansına bakın.
ExpiresInNotApplicableForOperation <Transactions> öğesinde belirtilen işlemlerin geçerlilik süresini desteklediğinden emin olun. Örneğin, VerificationToken işlemi bunu yapmaz.
RefreshTokenExpiresInNotApplicableForOperation <Transactions> öğesinde belirtilen işlemlerin, yenileme jetonunun geçerlilik süresini desteklediğinden emin olun. Örneğin, VerificationToken işlemi bunu yapmaz.
GrantTypesNotApplicableForOperation <SupportedGrantTypes> öğesindeki izin türlerinin belirtilen işlem için desteklendiğinden emin olun.
OperationRequired

<Operation> öğesini kullanarak bu politikada bir işlem belirtmeniz gerekir.

Not: <Operation> öğesi eksikse kullanıcı arayüzü, şema doğrulama hatası verir.

InvalidOperation

<Operation> öğesini kullanarak bu politikada geçerli bir işlem belirtmeniz gerekir.

Not: <Operation> öğesi geçersizse kullanıcı arayüzü, şema doğrulama hatası verir.

TokenValueRequired <Tokens> öğesinde bir jeton <Token> değeri belirtmelisiniz.

Hata değişkenleri

Bu değişkenler, bu politika çalışma zamanında bir hata tetiklediğinde ayarlanır.

Değişkenler Konum Örnek
fault.name="fault_name" fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelenen hatanın adıdır. Hata adı, hata kodunun son kısmıdır. fault.name = "invalid_request"
oauthV2.policy_name.failed policy_name, hataya neden olan politikanın kullanıcı tarafından belirtilen adıdır. oauthV2.GenerateAccesstoken.failed = true
oauthV2.policy_name.fault.name policy_name, hataya neden olan politikanın kullanıcı tarafından belirtilen adıdır. oauthV2.GenerateAccesstoken.fault.name = invalid_request

Not: ValidAccessToken işlemi için hata adı şu son eki içerir: keymanagement.service
Örneğin: keymanagement.service.invalid_access_token

oauthV2.policy_name.fault.cause policy_name, hataya neden olan politikanın kullanıcı tarafından belirtilen adıdır. oauthV2.GenerateAccesstoken.cause = Required param : grant_type

Örnek hata yanıtı

<GenerateResponse> öğesi true ise bu yanıtlar istemciye geri gönderilir.

<GenerateResponse> değeri true (doğru) değerine ayarlanırsa jeton ve kod oluşturan işlemler için politika bu biçimde hatalar döndürür. Tam liste için OAuth HTTP hatası yanıtı referansı bölümüne bakın.

{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}

<GenerateResponse> değeri true (doğru) değerine ayarlanırsa politika, doğrulama ve doğrulama işlemleri için bu biçimde hatalar döndürür. Tam liste için OAuth HTTP hatası yanıtı referansı başlıklı makaleye bakın.

{  
   {  
      "fault":{  
         "faultstring":"Invalid Access Token",
         "detail":{  
            "errorcode":"keymanagement.service.invalid_access_token"
         }
      }
   }

Hata kuralı örneği

<FaultRule name=OAuthV2 Faults">
    <Step>
        <Name>AM-InvalidClientResponse</Name>
        <Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition>
    </Step>
    <Step>
        <Name>AM-InvalidTokenResponse</Name>
        <Condition>(fault.name = "invalid_access_token")</Condition>
    </Step>
    <Condition>(oauthV2.failed = true) </Condition>
</FaultRule>

Politika şeması

Her politika türü, bir XML şeması (.xsd) ile tanımlanır. Referans olması için GitHub'da politika şemaları mevcuttur.

Varsayılan OAuth yapılandırmasıyla çalışma

Apigee Edge'deki her kuruluş (ücretsiz deneme sürümü kuruluşu bile) bir OAuth jeton uç noktası ile sağlanır. Uç nokta, API proxy'sindeki oauth adı verilen politikalarla önceden yapılandırılmıştır. Apigee Edge'de hesap oluşturur oluşturmaz jeton uç noktasını kullanmaya başlayabilirsiniz. Ayrıntılar için OAuth uç noktalarını anlama başlıklı makaleyi inceleyin.

Erişim jetonlarını kalıcı olarak silme

Varsayılan olarak, OAuth2 jetonları hem erişim jetonunun hem de yenileme jetonunun (varsa) süresi dolduktan 3 gün (259.200 saniye) sonra Apigee Edge sisteminden kalıcı olarak silinir. Bazı durumlarda bu varsayılan değeri değiştirmek isteyebilirsiniz. Örneğin, çok sayıda jeton oluşturuluyorsa disk alanından tasarruf etmek için tamamen silme süresini kısaltmak isteyebilirsiniz.

Private Cloud için Edge kullanıyorsanız kuruluş özelliklerini bu bölümde açıklandığı şekilde ayarlayarak bu varsayılan değeri değiştirebilirsiniz. (Süresi dolan jetonların 3 gün boyunca kalıcı olarak silinmesi, Private Cloud için Edge 4.19.01 ve sonraki sürümlerinde geçerli olur. Önceki sürümler için varsayılan kalıcı olarak silme aralığı 180 gündür.)

Edge Private Cloud 4.16.01 ve sonraki sürümleri için tamamen silme ayarlarını güncelleme

Not: Yalnızca bu ayarlar uygulandıktan sonra oluşturulan jetonlar etkilenir. Ayarlar, daha önce oluşturulan jetonlar için geçerli olmaz.

Edge Private Cloud 4.15.07 için tamamen silme ayarları güncelleniyor

Not: Yalnızca bu ayarlar uygulandıktan sonra oluşturulan jetonlar etkilenir. Ayarlar, daha önce oluşturulan jetonlar için geçerli olmaz.

RFC ile uyumlu olmayan davranış

OAuthV2 politikası, RFC ile uyumlu olmayan belirli özellikleri içeren bir jeton yanıtı döndürür. Aşağıdaki tabloda, OAuthV2 politikası tarafından döndürülen uyumlu olmayan özellikler ve bunlara karşılık gelen uyumlu özellikler gösterilmektedir.

OAuthV2 şunu döndürür: RFC ile uyumlu özellik:
"token_type":"BearerToken" "token_type":"Bearer"
"expires_in":"3600" "expires_in":3600

(Uyumlu olan değer dize değil, sayıdır.)

Ayrıca, grant_type = refresh_token aşağıdaki durumlarda süresi dolmuş bir yenileme jetonu için verilen hata yanıtıdır:

{"ErrorCode" : "invalid_request", "Error" :"Refresh Token expired"}

Ancak RFC uyumlu yanıt:

{"error" : "invalid_grant", "error_description" :"refresh token expired"}

İlgili konular