OAuthV2 politikası

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

Ne?

OAuthV2, OAuth 2.0 izin türü işlemlerini gerçekleştirmek için çok yönlü bir politikadır. Bu, 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 istiyorsanız OAuth ana sayfasına bakın. Kaynaklara, örneklere, videolara ve daha fazlasına bağlantılar sağlar. Bu politikanın çalışan bir uygulamada nasıl kullanıldığını gösteren iyi bir örnek için GitHub'daki gelişmiş OAuth örneğine bakın.

Örnekler

VerifyAccessToken

VerifyAccessToken

Bu OAuthV2 politika yapılandırması (VerifyAccessToken işlemiyle) Apigee Edge'e gönderilen 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 durdurulur ve yanıtta 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 Taşıyıcı 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

Edge, varsayılan olarak Bearer ön ekiyle Authorization üstbilgisinde erişim jetonlarını kabul eder. Bu varsayılan ayarı <AccessToken> öğesiyle değiştirebilirsiniz.

GenerateAccessToken

Erişim jetonları oluşturma

Desteklenen her bir bağış türü için erişim jetonlarının nasıl isteneceğini gösteren örnekler için Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleyi inceleyin. Bu konu, aşağıdaki işlemlere örnekler içerir:

GenerateAuthorizationCode

Yetkilendirme kodu oluştur

Yetkilendirme kodlarının nasıl isteneceğini gösteren örnekler için Yetkilendirme kodu isteme başlıklı makaleyi inceleyin.

RefreshAccessToken

Erişim jetonunu yenileme

Yenileme jetonu kullanarak erişim jetonlarının nasıl isteneceğini gösteren örnekler için Erişim jetonunu yenileme başlıklı makaleyi inceleyin.

Yanıt akışı jetonu

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

Bazen yanıt akışında bir erişim jetonu oluşturmanız gerekebilir. Örneğin, bu işlemi arka uç hizmetinde yapılan bazı özel doğrulamalara yanıt olarak yapabilirsiniz. Bu örnekteki kullanım alanı, örtülü izin türünü hariç tutarak hem erişim jetonu hem de yenileme jetonu gerektirir. Bu örnekte, jetonu oluşturmak için şifre izin türünü kullanacağız. Göreceğiniz gibi bu işlevin çalışmasını sağlamadaki püf noktası, JavaScript politikasıyla birlikte bir Yetkilendirme isteği başlığı iletmektir.

İlk olarak, örnek politikaya göz atalı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 eklerseniz politikada doğru giriş parametreleri belirtilmiş olsa bile 401 Yetkisiz hatasıyla başarısız olur. Bu sorunu çözmek için bir Authorization istek başlığı ayarlamanız gerekir.

Authorization başlığı, Base64 kodlu client_id:client_secret ile Temel erişim şeması içermelidir.

Bu üstbilgi, OAuthV2 politikasının hemen önüne yerleştirilmiş bir JavaScript politikasıyla birlikte aşağıdaki gibi eklenebilir. "local_clientid" ve "local_secret" değişkenleri önceden ayarlanmış 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)));

Ayrıca bkz. "Temel kimlik doğrulama kimlik bilgilerini kodlama".

Öğe referansı

Politika referansında OAuthV2 politikasının öğeleri ve özellikleri açıklanı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çermelidir. Bu değer, 255 karakteri aşmalıdır.

İsteğe bağlı olarak, politikayı<DisplayName> yönetim arayüzü proxy düzenleyicisinde farklı bir doğal dil adı kullanabilir.

Yok Zorunlu
continueOnError

Bir politika başarısız olduğunda hata döndürmesi için false olarak ayarlayın. Bu beklenen bir durumdur çoğu politika için geçerli olur.

Akış yürütmenin bir politikadan sonra bile devam etmesi için true olarak ayarlayın başarısız olur.

false İsteğe bağlı
enabled

Politikayı uygulamak için true olarak ayarlayın.

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

true İsteğe bağlı
async

Bu özelliğin desteği sonlandırıldı.

false Kullanımdan kaldırıldı

&lt;DisplayName&gt; öğe

Politikayı name özelliğine ek olarak farklı bir doğal dil adına sahip yönetim arayüzü proxy düzenleyicisi.

<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>

Varsayılan olarak VerifyAccessToken, erişim jetonunun Authorization üst bilgisinde gönderilmesini bekler. Bu varsayılan öğ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
İşlemlerle kullanılır:
  • VerifyAccessToken

<AccessTokenPrefix> öğesi

<AccessTokenPrefix>Bearer</AccessTokenPrefix>

Varsayılan olarak VerifyAccessToken, erişim jetonunun bir Yetkilendirme üst bilgisinde Taşıyıcı jetonu olarak gönderilmesini bekler. Örneğin:

-H "Authorization: Bearer Rft3dqrs56Blirls56a"

Şu anda yalnızca Bearer ön eki desteklenmektedir.

Varsayılan:

Taşıyıcı

Bulunma:

İsteğe bağlı

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

Taşıyıcı

İşlemlerle birlikte kullanılır:
  • VerifyAccessToken

<AppEndUser> öğesi

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

Uygulama son kullanıcı kimliğinin yetkilendirme sunucusuna gönderilmesi gerektiğinde bu öğe, Edge'in son kullanıcı kimliğini nerede aradığını belirtmenize olanak tanır. Örneğin, sorgu parametresi veya HTTP başlığı olarak gönderilebilir.

Örneğin request.queryparam.app_enduser, AppEndUser parametresinin sorgu parametresi olarak (ör. ?app_enduser=ntesla@theramin.com) bulunmasını belirtir. Örneğin, bir HTTP üstbilgisinde AppEndUser değerini zorunlu kılmak için bu değeri request.header.app_enduser olarak ayarlayın.

Bu ayarı belirtmek, erişim jetonuna bir uygulama son kullanıcı kimliği eklemenizi sağlar. Bu özellik, OAuth 2.0 erişim jetonlarını son kullanıcı kimliğine göre almak veya iptal etmek istiyorsanız kullanışlıdır. Daha fazla bilgi için OAuth 2.0 erişim jetonlarının son kullanıcı kimliğine, uygulama kimliğine veya her ikisine göre 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 politikanın erişebildiği tüm akış değişkenleri.

İzin türleriyle kullanılır:
  • authorization_code
  • örtülü
  • ş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>

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

Bu öğe, bir akış değişkeninde veya değişmez dizedeki bir değeri belirtmenize olanak tanır. Hem bir değişken hem de bir dize belirtirseniz akış değişkeninde belirtilen değer kullanılır. Değişken çözümlenemezse dize varsayılan olur.

Bu öğeyi kullanma hakkında daha fazla bilgi için Jetonları ve Yetkilendirme Kodlarını Özelleştirme başlıklı makaleyi inceleyin.

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

Bu politikanın GenerateResponse öğesini true olarak ayarlarsanız belirlediğiniz tüm özel özellikler dahil olmak üzere jetonun tam JSON temsilinin yanıtta döndürüleceğini unutmayın. Bazı durumlarda, istemci uygulamaları tarafından görülemeyecek şekilde özel özelliklerinizin bir kısmını veya tamamını yanıtta gizlemek isteyebilirsiniz.

Özel özellikler varsayılan olarak 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ğinin değeri kalıcı değildir. Oluşturulan yanıtta gizlemek istediğiniz özel özelliklere sahip bir erişim jetonu oluşturduğunuzu varsayalım. display=false ayarını yaparak bu hedefe ulaşabilirsiniz. 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 display özelliğinin erişim jetonu oluşturma politikasında başlangıçta false olarak ayarlandığını hatırlamamasıdır. Özel özellik, erişim jetonunun meta verilerinin 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, amaçladığınız davranış olmayabilir.

Bu durumlarda özel özellikleri gizlemek için aşağıdaki seçeneklerden yararlanabilirsiniz:

  • Yenileme jetonu politikasındaki özel özellikleri açıkça sıfırlayın ve bunların görüntülenmesini yanlış olarak 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 ayıklamak için bir son işlem JavaScript politikası kullanın.

Ayrıca Jetonları ve Yetkilendirme Kodlarını Özelleştirme başlıklı makaleyi de inceleyin.

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österilip gösterilmeyeceğini belirtmenizi sağlar. true ise yanıtta özel özellikler görünür (GenerateResponse da etkinse). false ise özel özellikler yanıta dahil edilmez. Varsayılan değer true'tür. Yanıtta özel özellikleri görüntüleme veya gizleme başlıklı makaleyi inceleyin.
İzin türleriyle kullanılır:
  • authorization_code
  • örtülü
  • ş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, Apigee'nin request.formparam.client_id akış değişkeninde müşteri kimliğini araması gerektiğini belirtir. ClientId değerinin başka bir değişkene ayarlanması desteklenmez. Ayrıca Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleyi de inceleyin.

Varsayılan:

request.formparam.client_id (x-www-form-urlencoded olarak kodlanmış ve istek gövdesinde belirtilen)

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
  • dolaylı
  • client_credentials

GenerateAuthorizationCode işlemiyle de kullanılabilir.

<Code> öğesi

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

Yetkilendirme bağışı 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 belirtmenize olanak tanır. Örneğin, sorgu parametresi, HTTP başlığı veya form parametresi (varsayılan) olarak gönderilebilir.

request.queryparam.auth_code değişkeni, yetkilendirme kodunun sorgu parametresi olarak (ör. ?auth_code=AfGlvs9) mevcut olması gerektiğini belirtir. Örneğin, bir HTTP başlığında yetkilendirme kodunu zorunlu kılmak için bu değeri request.header.auth_code olarak ayarlayın. Ayrıca Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleyi de inceleyin.

Varsayılan:

request.formparam.code (x-www-form-url olarak kodlanır ve istek gövdesinde belirtilir)

Bulunma:

isteğe bağlı

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

<ExpiresIn> öğesi

<ExpiresIn>10000</ExpiresIn> 

Erişim jetonlarının ve yetkilendirme kodlarının geçerlilik bitiş zamanını milisaniye cinsinden zorunlu kılar. (Yenileme jetonları için <RefreshTokenExpiresIn> kullanın.) Süre sonu değeri, sistem tarafından oluşturulan bir değere <ExpiresIn> değeri eklenerek hesaplanır. <ExpiresIn> -1 olarak ayarlanırsa jeton veya kodun geçerlilik süresi maksimum OAuth erişim jetonu geçerlilik süresi'ne göre sona erer. <ExpiresIn> belirtilmezse sistem, sistem düzeyinde yapılandırılan bir varsayılan değer uygular.

Geçerlilik süresi ayrıca çalışma zamanında sabit kodlu bir varsayılan değer veya bir akış değişkenine referans vererek de ayarlanabilir. Örneğin, bir jetonun geçerlilik bitiş tarihini anahtar/değer çiftinde saklayabilir, alabilir, bir değişkene atayabilir ve politikada referans verebilirsiniz. Örneğin, kvm.oauth.expires_in.

Herkese Açık Bulut için Apigee Edge ile Edge, aşağıdaki varlıklara erişim sağlandıktan sonra bu varlıkları en az 180 saniye boyunca önbellekte tutar.

  • OAuth erişim jetonları. Bu da iptal edilen bir jetonun, önbellek sınırı sona erene kadar üç dakika kadar 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ı üzerindeki özel özellikler.

Aşağıdaki dörtlükte bir akış değişkeni ve varsayılan değer de belirtilmiştir. 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 jetonun süresinin dolmasını zorunlu kılmayı desteklemez. Jeton geçerlilik süresini zorunlu kılmanız gerekiyorsa (örneğin, bir koşula göre) bu Apigee topluluk gönderisinde olası bir çözümden yararlanabilirsiniz.

Varsayılan olarak, süresi dolan erişim jetonları, geçerlilik bitiş tarihinden 3 gün sonra Apigee Edge sisteminden otomatik olarak temizlenir. Ayrıca bkz. Erişim jetonlarını silme

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

  1. message-processor.properties dosyasını bir düzenleyicide açın. Dosya yoksa oluşturun:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Tesisi istediğiniz gibi ayarlayın:
    conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
  3. properties dosyasının sahibinin "apigee" kullanıcısı olduğundan emin olun:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Mesaj işleyiciyi 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ış bir varsayılan değer uygular.

Bulunma:

İsteğe bağlı

Tür: Tamsayı
Geçerli değerler:
İzin türleriyle kullanılır:
  • authorization_code
  • örtülü
  • ş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ı söyler.

request.queryparam.external_access_token değişkeni, harici erişim jetonunun bir sorgu parametresi olarak (örneğin, ?external_access_token=12345678) bulunması 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 bölümüne de göz atın.

<ExternalAuthorization> öğesi

<ExternalAuthorization>true</ExternalAuthorization>

Bu öğe yanlışsa veya mevcut değilse Edge, client_id ve client_secret öğelerini normalde Apigee Edge yetkilendirme deposuna göre doğrular. Üçüncü taraf OAuth jetonlarıyla çalışmak istediğinizde bu öğeyi kullanın. Bu öğeyi kullanmayla ilgili ayrıntılar için Üçüncü Taraf OAuth Jetonlarını Kullanma başlıklı makaleyi inceleyin.

Varsayılan:

yanlış

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 kodunu (Apigee Edge tarafından oluşturulmayan bir kimlik doğrulama kodu) nerede bulacağını söyler.

request.queryparam.external_auth_code değişkeni, harici yetkilendirme kodunun bir sorgu parametresi olarak (örneğin, ?external_auth_code=12345678) bulunması gerektiğini belirtir. HTTP başlığında 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 bölümüne de göz atın.

<ExternalRefreshToken> öğesi

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

Apigee Edge'e harici bir 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) bulunması 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 olarak ayarlanırsa politika bir yanıt oluşturur ve döndürür. Örneğin, GenerateAccessToken için yanıt şu şekilde 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 akış değişkeni grubu, 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 cinsinden ifade edildiğini unutmayın.

Varsayılan:

yanlış

Bulunma:

İsteğe bağlı

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

<GenerateErrorResponse> öğesi

<GenerateErrorResponse enabled='true'/>

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

Varsayılan:

yanlış

Bulunma:

İsteğe bağlı

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

<GrantType>

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

Politikaya, bir istekte iletilen grant type parametresini nerede bulacağını bildirir. OAuth 2.0 spesifikasyonuna göre, 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, Password'ün bir sorgu parametresi olarak (örneğin, ?grant_type=password) sunulması gerektiğini belirtir. Bir HTTP başlığında izin türünü zorunlu kılmak için bu değeri request.header.grant_type olarak ayarlayın. Ayrıca, Erişim jetonları ve yetkilendirme kodları isteme konusuna da bakın.

Varsayılan:

request.formparam.grant_type (x-www-form-urlencoded biçimindedir ve istek gövdesinde belirtilir)

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
  • dolaylı
  • client_credentials
  • refresh_token

<Operation> öğ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ürleriyle ilgili işlemler başarılı olur. Diğer bir deyişle, <SupportedGrantTypes> listesinde bir <GrantType> belirtirseniz <Operation> değerini atlayabilirsiniz. <Operation> veya <SupportedGrantTypes> belirtilmezse varsayılan izin türü authorization_code olur. Yani yetkilendirme_kodu 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üyle kullanılır. Şifre verme türünde, kullanıcı kimlik bilgileri (şifre ve kullanıcı adı) OAuthV2 politikasına sunulmalıdır. <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 bir hata verir. Kimlik bilgilerini içeren herhangi bir akış değişkenine referans vermek için <PassWord> ve <UserName> öğelerini kullanabilirsiniz.

Örneğin, bir sorgu parametresi kullanarak şifreyi jeton isteğinde iletebilir ve öğeyi şu şekilde ayarlayabilirsiniz: <PassWord>request.queryparam.password</PassWord>. HTTP üst bilgisinde şifrenin zorunlu kılınmasını istiyorsanız bu değeri request.header.password olarak ayarlayın.

OAuthV2 politikası bu kimlik bilgisi değerleriyle başka bir işlem yapmaz. Edge yalnızca bunların mevcut olduğunu doğrular. Değer isteğini almak ve jeton oluşturma politikası yürütülmeden önce bunları bir kimlik sağlayıcıya göndermek API geliştiricisine bağlıdır.

Ayrıca Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleyi de inceleyin.

Varsayılan:

request.formparam.password (x-www-form-urlencoded olarak kodlanmış ve istek gövdesinde belirtilen)

Bulunma:

İsteğe bağlı

Tür: Dize
Geçerli değerler: Çalışma zamanında politikanın kullanabileceği tüm akış değişkenleri.
İzin türleriyle kullanılır: şifre

<RedirectUri> öğesi

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

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

Yönlendirme URI'leri hakkında

Yönlendirme URI'leri, yetkilendirme kodu ve gizli 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) nereye gönderileceğini bildirir. Bu parametrenin ne zaman gerekli olduğunu, ne zaman isteğe bağlı olduğunu ve nasıl kullanıldığını anlamak önemlidir:

  • (zorunlu) Geliştirici uygulamasına, istek istemci anahtarlarıyla ilişkili bir Geri Çağırma URL'si kaydedilmişse ve istekte redirect_uri varsa bu iki URL tam olarak eşleşmelidir. Eşleşmezlerse hata döndürülür. Geliştirici uygulamalarını Edge'de kaydetme ve geri çağırma URL'si belirtme hakkında bilgi edinmek için Uygulama kaydetme ve API anahtarlarını yönetme başlıklı makaleyi inceleyin.

  • (isteğe bağlı) Geri çağırma URL'si kaydedilmişse ve istekte redirect_uri yoksa Edge, kaydedilen geri çağırma URL'sine yönlendirir.
  • (zorunlu) Geri çağırma URL'si kaydedilmemişse redirect_uri gereklidir. Bu durumda Edge'in HERHANGİ bir URL'yi kabul edeceğini unutmayın. Bu durum güvenlik sorunu oluşturabileceğinden yalnızca güvenilir istemci uygulamalarıyla kullanılmalıdır. İstemci uygulamalarına güvenilmiyorsa en iyi uygulama, her zaman bir Geri Çağırma 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 parametresinin bir sorgu parametresi olarak (ör. ?redirect_uri=login.myapp.com) bulunmasını belirtir. HTTP başlığında RedirectUri değerinin zorunlu kılınmasını istiyorsanız bu değeri request.header.redirect_uri olarak ayarlayın. Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleyi de inceleyin.

Varsayılan:

request.formparam.redirect_uri (x-www-form-urlencoded biçimindedir ve istek gövdesinde belirtilir)

Bulunma:

İsteğe bağlı

Tür: Dize
Geçerli değerler: Çalışma zamanında politikada erişilebilir olan herhangi bir akış değişkeni
İzin türleriyle kullanılır:
  • authorization_code
  • kapalı

GenerateAuthorizationCode işlemiyle de kullanılır.

<RefreshToken> öğesi

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

Yenileme jetonu kullanarak erişim jetonu istediğinizde istekte yenileme jetonunu sağlamanız gerekir. Bu öğe, Edge'in yenileme jetonunu nerede araması gerektiğini belirtmenize olanak tanır. Ö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) bulunması gerektiğini belirtir. Örneğin, bir HTTP üstbilgisinde RefreshToken'ı zorunlu kılmak için bu değeri request.header.refresh_token olarak ayarlayın. Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleyi de inceleyin.

Varsayılan:

request.formparam.refresh_token (x-www-form-url olarak kodlanıp istek gövdesinde belirtilir)

Bulunma:

İsteğe bağlı

Tür: Dize
Geçerli değerler: Çalışma zamanında politikada erişilebilir olan herhangi bir akış değişkeni
İzin türleriyle kullanılır:
  • refresh_token

<RefreshTokenExpirationIn> öğesi

<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>

Yenileme jetonlarının geçerlilik süresini milisaniye cinsinden zorlar. Süre sonu değeri, sistem tarafından oluşturulan bir değere <RefreshTokenExpiresIn> değeri eklenerek hesaplanır. <RefreshTokenExpiresIn> -1 olarak ayarlanırsa yenileme jetonunun süresi maksimum OAuth yenileme jetonu son kullanma tarihine göre dolar. <RefreshTokenExpiresIn> belirtilmezse sistem, sistem düzeyinde yapılandırılan varsayılan bir değeri uygular. Varsayılan sistem ayarları hakkında daha fazla bilgi için Apigee Edge Destek ile iletişime geçin.

Süre sonu, kodlanmış bir varsayılan değer kullanılarak veya bir akış değişkenine referans verilerek çalışma zamanında da ayarlanabilir. Örneğin, bir jetonun geçerlilik bitiş tarihini anahtar/değer çiftinde saklayabilir, alabilir, bir değişkene atayabilir ve politikada referans verebilirsiniz. Örneğin, kvm.oauth.expires_in.

Aşağıdaki dörtlükte bir akış değişkeni ve varsayılan değer de belirtilmiştir. 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 için Edge kurulumunda varsayılan değer conf_keymanagement_oauth_refresh_token_expiry_time_in_millis mülkü tarafından belirlenir. Bu özelliği ayarlamak için:

  1. message-processor.properties dosyasını bir düzenleyicide açın. Dosya yoksa oluşturun:
    vi /opt/apigee/customer/application/message-processor.properties
  2. Tesisi istediğiniz gibi ayarlayın:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
  3. properties dosyasının sahibinin "apigee" kullanıcısı olduğundan emin olun:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. Mesaj işleyiciyi yeniden başlatın.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

Varsayılan:

63072000000 ms (2 yıl) (5 Ağustos 2024'ten itibaren geçerlidir)

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 örtülü izin türü akışlarıyla kullanılır.

Edge, varsayılan olarak yanıt türü değerini response_type sorgu parametresinde arar. Bu varsayılan davranışı geçersiz kılmak istiyorsanız 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. Ayrıca Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleyi de inceleyin.

Varsayılan:

request.formparam.response_type (x-www-form-urlencoded biçimindedir ve istek gövdesinde belirtilir)

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 (dolaylı izin türü için)
İzin türleriyle kullanılır:
  • dolaylı
  • 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 birlikte kullanılır:
  • refresh_token

<Scope> öğesi

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

Bu öğe, GenerateAccessToken veya GenerateAuthorizationCode politikalarından birinde varsa jetonun veya kodun hangi kapsamlarda verileceğini belirtmek için kullanılır. Bu değerler genellikle istemci uygulamasından gelen istekte politikaya iletilir. Öğeyi bir akış değişkeni alacak şekilde yapılandırarak kapsamların bir istekte nasıl iletileceğini seçme seçeneği elde edebilirsiniz. Aşağıdaki örnekte request.queryparam.scope, alanın ?scope=READ gibi bir sorgu parametresi olarak mevcut olması gerektiğini gösterir. Bir HTTP üstbilgisinde kapsamın zorunlu kılınmasını istiyorsanız bu değeri request.header.scope olarak ayarlayın.

Bu öğe bir "VerifyAccessToken" politikasında görünüyorsa politikanın hangi kapsamları zorunlu kılması gerektiğini belirtmek için kullanılır. Bu tür politikalarda değer, "sabit kodlanmış" bir kapsam adı olmalıdır. Değişken kullanamazsınız. Örneğin:

<Scope>A B</Scope>

OAuth2 kapsamlarıyla çalışma ve Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleleri de inceleyin.

Varsayılan:

Kapsam yok

Bulunma:

İsteğe bağlı

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

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

VerifyAccessToken ile birlikte kullanılırsa boşlukla ayrılmış bir kapsam adları listesi (dize).

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

<State> öğesi

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

İstemci uygulamasının durum bilgilerini yetkilendirme sunucusuna göndermesi gerektiği durumlarda bu öğe, Edge'in durum değerlerini nerede araması gerektiğini belirtmenize olanak tanır. Örneğin, bir sorgu parametresi veya HTTP başlığı 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 ?state=HjoiuKJH32 gibi bir sorgu parametresi olarak belirtilmesi gerektiğini gösterir. HTTP başlığında eyaletin zorunlu tutulmasını istiyorsanız bu değeri request.header.state olarak ayarlayın. Ayrıca bkz. Erişim jetonları ve yetkilendirme kodları isteme.

Varsayılan:

Durum yok

Bulunma:

İsteğe bağlı

Tür: Dize
Geçerli değerler: Çalışma zamanında politikanın erişebildiği 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 kaydetmesini söyler. Aksi takdirde kalıcı hale getirilmez.

Varsayılan:

yanlış

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 bir OAuth jeton uç noktası tarafından desteklenen 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ğıtacak şekilde yapılandırılabilir). Uç noktalar hakkında daha fazla bilgi için OAuth uç noktalarını anlama başlıklı makaleyi inceleyin. Grant türü, jeton isteklerinde grant_type parametresinde iletilir.

Desteklenen hibe türü belirtilmezse yalnızca authorization_code ve implicit hibe türlerine izin verilir. Ayrıca bkz. <GrantType> öğesi (Apigee Edge'in istemci isteğinde iletilen grant_type parametresini nerede araması gerektiğini belirtmek için kullanılan üst seviye bir öğe). Edge, grant_type parametresinin değerinin desteklenen izin türlerinden biriyle eşleştiğinden emin olur.

Varsayılan:

authorization _code and implicit

Bulunma:

Zorunlu

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

<Tokens>/<Token> öğesi

ValidateToken ve InvalidateToken işlemleriyle kullanılır. Ayrıca Erişim jetonlarını onaylama ve iptal etme başlıklı makaleyi inceleyin. <Token> öğesi, iptal edilecek jetonun kaynağını tanımlayan akış değişkenini tanımlar. Geliştiricilerin erişim jetonlarını access_token adlı sorgu parametreleri olarak göndermesi bekleniyorsa request.queryparam.access_token kullanın.

<UserName> öğesi

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

Bu öğe yalnızca şifre izin türüyle kullanılır. Şifre verme türünde, kullanıcı kimlik bilgileri (şifre ve kullanıcı adı) OAuthV2 politikasına sunulmalıdır. <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 bir 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>.HTTP başlığında kullanıcı adını zorunlu kılmak için bu değeri request.header.username olarak ayarlayın.

OAuthV2 politikası, bu kimlik bilgisi değerleriyle başka bir işlem yapmaz. Edge, bunların mevcut olduğunu doğrular. Jeton oluşturma politikası uygulanmadan önce API geliştiricisinin, değerler isteğini alıp bir kimlik sağlayıcıya göndermesi gerekir.

Ayrıca Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleyi de inceleyin.

Varsayılan:

request.formparam.username (x-www-form-url olarak kodlanmıştır ve istek gövdesinde belirtilir)

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

Bir API proxy'si için jeton uç noktası oluşturulduktan sonra, VerifyAccessToken işlemini belirten ilgili OAuthV2 politikası, korunan kaynağı gösteren akışa 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 eklenir. Bir API'ye yapılan tüm isteklerin doğrulanmasını sağlamak için politikayı ProxyEndpoint istek ön akışına aşağıdaki gibi ekleyin:

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

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

Ad Açıklama
Kapsam

Boşlukla sınırlandırılmış kapsam listesi. Listelenen kapsamlardan en az biri erişim jetonunda varsa doğrulama başarılı olur. Örneğin, aşağıdaki politika, erişim jetonunun 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 başlığında sunulması beklenir. Erişim jetonunun standart olmayan bir konumda (ör. sorgu parametresi veya Authorization dışında bir ada sahip bir HTTP üst bilgisi) sunulması bekleniyorsa bu ayarı kullanın.

Erişim jetonlarını doğrulama ve Erişim jetonları ile yetkilendirme kodları isteme başlıklı makaleleri de inceleyin.

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

Her izin türü için politika, istek mesajlarında konum veya gerekli bilgiler hakkında varsayımlarda bulunur. Bu varsayımlar OAuth 2.0 spesifikasyonuna dayanı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 yerini HTTP üstbilgileri 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>
  ...

Alternatif olarak, müşterinizin uygulama tabanını desteklemek için gerekirse başlıklarla sorgu parametrelerini birlikte kullanabilirsiniz:

  ...
  <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 yürütülen diğer politikalar veya uygulamalar tarafından kullanılabilir.

VerifyAccessToken işlemi

VerifyAccessToken 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, erişim jetonu, geliştirici uygulaması, geliştirici ve şirketle ilgili özellikleri sağlar. Örneğin, bu değişkenlerden herhangi birini okumak ve daha sonra akışta gerektiği gibi kullanmak için bir AssignMessage veya JavaScript politikası kullanabilirsiniz. Bu değişkenler, hata ayıklama amacıyla da faydalı olabilir.

Jetona özgü değişkenler

Değişkenler Açıklama
organization_name Vekil sunucunun yürütüldüğü kuruluşun adı.
developer.id Kayıtlı istemci uygulamasıyla ilişkilendirilen geliştiricinin kimliği.
developer.app.name Kayıtlı istemci uygulamasıyla ilişkili 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ğrulanan erişim jetonu.
accesstoken.{custom_attribute} Erişim jetonundaki adlandırılmış özel özellik.
issued_at Erişim jetonunun verildiği tarih, milisaniye cinsinden Unix epoch zamanında ifade edilir.
expires_in Erişim jetonunun geçerlilik bitiş zamanı. Saniye cinsinden ifade edilir. ExpiresIn öğesi, geçerlilik süresini milisaniye cinsinden belirlese de 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şkilendirilmiş kapsam (varsa).
apiproduct.<custom_attribute_name> Kayıtlı istemci uygulamasıyla ilişkili API ürününün adlandırılmış özel bir özelliği.
apiproduct.name Kayıtlı istemci uygulamasıyla ilişkili API ürününün adı.
revoke_reason

(Yalnızca Apigee hybrid) 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şkilendirilmiş Geliştirici Uygulaması ile ilgilidir.

Değişkenler Açıklama
app.name
app.id
app.accessType
app.callbackUrl
app.status onaylanmış veya iptal edilmiş
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 özgü değişkenler

app.appType "Company" ise şirket özellikleri doldurulur ve app.appType "Developer" ise geliştirici özellikleri doldurulur.

Değişkenler Açıklama
Geliştiriciye özgü 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 özgü değişkenler

app.appType "Company" ise şirket özellikleri doldurulur. app.appType ise "Developer" 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 özelliği.

GenerateAuthorizationCode işlemi

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

Ön ek: 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şkili 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.

Ön ek: 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şkili 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 parametresinin saniye cinsinden 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 Vekil sunucunun yürütüldüğü kuruluş.
api_product_list Jetonun ilgili geliştirici uygulamasıyla ilişkili ürünlerin listesi.
refresh_count
refresh_token Oluşturulan yenileme jetonu. İstemci kimlik bilgileri atama türü için yenileme jetonlarının oluşturulmadığını unutmayın.
refresh_token_expires_in Yenileme jetonunun saniye cinsinden kullanım ömrü.
refresh_token_issued_at Bu zaman değeri, ilgili 32 bitlik zaman damgası miktarının dize temsilidir. Örneğin, "Çr, 21 Ağu 2013 19:16:47 UTC", 1377112607413 zaman damgası değerine karşılık gelir.
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.

Ön ek: 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 Jeton için süre sonu değeri (saniye cinsinden). Ayrıntılar için <ExpirationIn> öğesine bakın.

Hata referansı

Bu bölümde, bu politika bir hatayı tetiklediğinde döndürülen hata kodları ve hata mesajlarının yanı sıra Edge tarafından ayarlanan hata değişkenleri açıklanmaktadır. Hata kuralları geliştirirken bu bilgilerin farkında olmanız önemlidir. hoşuma gitmesi için bir fırsattır. Daha fazla bilgi için Bilmeniz gerekenler Politika hataları ve Kullanım sorun.

Çalışma zamanı hataları

Bu hatalar, politika yürütüldüğünde ortaya çıkabilir.

Hata kodu HTTP durumu Neden Operasyonlara etkisi
steps.oauth.v2.access_token_expired 401 Erişim jetonunun süresi doldu.

VerifyAccessToken
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 jetonu. VerifyAccessToken
steps.oauth.v2.FailedToResolveAccessToken 500 Politikanın, <AccessToken> öğesi, ancak değişken çözümlenemedi. GenerateAccessToken
steps.oauth.v2.FailedToResolveAuthorizationCode 500 Politikanın, <Code> öğesi, ancak değişken çözümlenemedi. GenerateAuthorizationCode
steps.oauth.v2.FailedToResolveClientId 500 Politikanın, <ClientId> öğesi, ancak değişken çözümlenemedi. GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken
steps.oauth.v2.FailedToResolveRefreshToken 500 Politikanın, <RefreshToken> öğesi, ancak değişken çözümlenemedi. RefreshAccessToken
steps.oauth.v2.FailedToResolveToken 500 Politikanın, <Tokens> öğesi, ancak değişken çözümlenemedi.

ValidateToken
InvalidateToken

steps.oauth.v2.InsufficientScope 403 İstekte sunulan erişim jetonu, kapsamla eşleşmeyen bir kapsama sahip erişim jetonunu doğrulama politikasında belirtildiğinden emin olun. 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

Bu hata adı,<GenerateResponse> politika true olarak ayarlanır ve istekte gönderilen istemci kimliği geçersiz. Aşağıdakiler için doğru istemci anahtarı ve gizli anahtar değerlerini kullandığınızdan emin olun: proxy'nizle ilişkili Geliştirici Uygulaması. Genellikle bu değerler bir Base64 olarak kodlanmış Temel Yetkilendirme başlığı.

Not: Mevcut hata kuralını değiştirmeniz önerilir koşullarını karşılamak için invalid_client ve InvalidClientIdentifier ad. 16.09.21 Sürümüne bakın Notlar başlıklı makaleyi inceleyerek daha fazla bilgi edinebilirsiniz.

GenerateAccessToken
RefreshAccessToken
steps.oauth.v2.invalid_request 400 Bu hata adı, genellikle eksik olan hata türleri için kullanılır. veya istekte gönderilen yanlış parametreler olabilir. <GenerateResponse> ise false olarak ayarlanırsa, hata değişkenlerini (aşağıda açıklanmıştır) kullanarak (ör. hatanın adı ve nedeni) GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken
steps.oauth.v2.InvalidAccessToken 401 Yetkilendirme başlığında gerekli olan "Taşıyıcı" kelimesi yok. Örneğin, örnek: 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 yok.

İpuçları: Erişim jetonuyla ilişkilendirilen ürünün yapılandırdığınızdan emin olun. Örneğin, kaynak yollarında joker karakterler kullanıyorsanız joker karakterler doğru şekilde kullanılıyor. Ayrıntılı bilgi için API ürünleri oluşturma başlıklı makaleyi inceleyin.

Ayrıca bkz. Bu hatanın nedenleri hakkında daha fazla bilgi için Apigee Topluluk gönderisi başlıklı makaleyi inceleyin.

VerifyAccessToken
steps.oauth.v2.InvalidClientIdentifier 500

Bu hata adı,<GenerateResponse> politika false (yanlış) olarak ayarlanır ve istekte gönderilen istemci kimliği geçersiz. Proxy'nizle ilişkilendirilmiş Geliştirici Uygulaması. Genellikle bu değerler Base64 olarak gönderilir Kodlanmış Temel Yetkilendirme üstbilgisi.
.
. Not: Böyle bir durumda, bu hata önceden şöyle çağrılıyordu: invalid_client. Mevcut hata kuralını değiştirmeniz önerilir koşullarını karşılamak için invalid_client ve InvalidClientIdentifier ad. 16.09.21 Sürümüne bakın Notlar başlıklı makaleyi inceleyerek daha fazla bilgi edinebilirsiniz.

GenerateAccessToken
RefreshAccessToken

steps.oauth.v2.InvalidParameter 500 Politika bir erişim jetonu veya yetkilendirme kodu belirtmelidir, ancak her ikisini de seçebilirsiniz. GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.InvalidTokenType 500 <Tokens>/<Token> öğesi, jetonu belirtmenizi gerektirir türü (örneğin, refreshtoken). İstemci yanlış türü geçerse hatası verilir. ValidateToken
InvalidateToken
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 ( &lt;SupportedGrantTypes&gt; öğesi).

Not: Şu anda desteklenmeyen izin türü hatalarının bulunduğu bir hata bulunmaktadır. emin olun. Desteklenmeyen bir izin türü hatası oluşursa proxy Hata Akışı'nı beklendiği gibi girin.

GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken

Dağıtım hataları

Bu politikayı içeren bir proxy dağıttığınızda bu hatalar oluşabilir.

Hata adı Neden
InvalidValueForExpiresIn

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

InvalidValueForRefreshTokenExpiresIn <RefreshTokenExpiresIn> öğesi için geçerli değerler pozitiftir tam sayılar ve -1.
InvalidGrantType <SupportedGrantTypes> özelliğinde geçersiz bir izin türü belirtildi öğesine dokunun. Geçerli türlerin listesi için politika referansına bakın.
ExpiresInNotApplicableForOperation <Operations> politikasında belirtilen işlemlerin öğe desteği sona erecektir. Örneğin, VerifyToken işlemi bunu yapmaz.
RefreshTokenExpiresInNotApplicableForOperation <Operations> politikasında belirtilen işlemlerin öğe desteği yenileme jetonun süresinin dolması. Örneğin, VerifyToken işlemi bunu yapmaz.
GrantTypesNotApplicableForOperation <SupportedGrantTypes> bölümünde belirtilen izin türlerinin şunlar için desteklenir: belirtilen işlem.
OperationRequired

<Operation> kullanarak bu politikada bir işlem belirtmelisiniz öğesine dokunun.

Not: <Operation> öğesi eksikse Kullanıcı arayüzü bir şema doğrulama hatası bildiriyor.

InvalidOperation

Bu politikada geçerli bir işlem belirtmek için <Operation> öğesi.

Not: <Operation> öğesi geçersizse Kullanıcı arayüzü bir şema doğrulama hatası bildiriyor.

TokenValueRequired Şu öğede bir jeton <Token> değeri belirtmelisiniz: <Tokens> öğesi.

Hata değişkenleri

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

Değişkenler Konum Örnek
fault.name="fault_name" fault_name, yukarıdaki Çalışma zamanı hataları tablosunda listelendiği gibi 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: VerifyAccessToken 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>, bu yanıtları istemciye geri gönderir. öğesi true olarak ayarlanır.

<GenerateResponse> değeri true ise politika hata döndürür jeton ve kod oluşturan işlemler için bu biçimde sunulur. Tam liste için bkz. OAuth HTTP hatası yanıt referansı.

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

<GenerateResponse> değeri true ise politika hata döndürür kullanabilirsiniz. Tam liste için bkz. OAuth HTTP hatası yanıt referansı.

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

Örnek hata kuralı

<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ıyla (.xsd) tanımlanır. Referans olarak kullanabileceğiniz politika şemalarını GitHub'da bulabilirsiniz.

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

Apigee Edge'deki her kuruluş (ücretsiz deneme kuruluşları dahil) bir OAuth jetonu uç noktasıyla temel hazırlığa sahiptir. Uç nokta, API proxy'sindeki oauth adlı politikalarla önceden yapılandırılmıştır. Apigee Edge'de bir hesap oluşturur oluşturmaz jeton uç noktasını kullanmaya başlayabilirsiniz. Ayrıntılı bilgi için OAuth uç noktalarını anlama başlıklı makaleyi inceleyin.

Erişim jetonlarını temizleme

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 temizlenir. Bazı durumlarda bu varsayılan ayarı 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.

Edge for Private Cloud kullanıyorsanız bu varsayılan ayarı, bu bölümde açıklandığı şekilde kuruluş özelliklerini ayarlayarak değiştirebilirsiniz. (Süresi dolan jetonların 3 gün içinde tamamen silinmesi, Edge for Private Cloud'un 4.19.01 ve sonraki sürümleri için geçerlidir. Önceki sürümlerde varsayılan temizleme aralığı 180 gündür.)

Edge Private Cloud 4.16.01 ve sonraki sürümler için temizleme ayarlarını güncelleme

Not: Bu ayarların uygulanmasından sonra oluşturulan jetonlar etkilenir. Ayarlar, daha önce oluşturulan jetonlar için geçerli değildir.

Edge Private Cloud 4.15.07 için temizleme ayarlarını güncelleme

Not: Bu ayarlar yalnızca bu ayarların uygulanmasından sonra oluşturulan jetonları etkiler. Ayarlar, daha önce oluşturulan jetonlar için geçerli değildir.

RFC'ye uygun olmayan davranış

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

OAuthV2 aşağıdakileri döndürür: RFC ile uyumlu mülk:
"token_type":"BearerToken" "token_type":"Bearer"
"expires_in":"3600" "expires_in":3600

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

Ayrıca, grant_type = refresh_token olduğunda süresi dolmuş yenileme jetonu için hata yanıtı:

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

Ancak RFC'ye uygun yanıt şudur:

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

İlgili konular