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ı. İ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 |
Yok | Gerekli |
continueOnError |
Bir politika başarısız olduğunda hata döndürülmesi için Bir politika başarısız olduktan sonra bile akış yürütülmesinin devam etmesi için |
false | İsteğe bağlı |
enabled |
Politikayı uygulamak için Politikayı devre dışı bırakmak için |
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 |
---|---|
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: |
|
<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: |
|
<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: |
|
<Ö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: |
|
Bulunma: |
İsteğe bağlı |
Geçerli değerler: |
|
İzin türleriyle kullanılır: |
|
<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: |
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:
message-processor.properties
dosyasını bir düzenleyicide açın. Dosya mevcut değilse oluşturun:vi /opt/apigee/customer/application/message-processor.properties
- Mülkü istediğiniz gibi ayarlayın:
conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
- Özellikler dosyasının "Apigee" kullanıcısına ait olduğundan emin olun:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- 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: |
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: |
|
<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: |
|
<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: |
|
<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: |
|
<İşlem> öğesi
<Operation>GenerateAuthorizationCode</Operation>
Politika tarafından yürütülen OAuth 2.0 işlemi.
Varsayılan: |
|
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: |
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: |
|
<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:
message-processor.properties
dosyasını bir düzenleyicide açın. Dosya mevcut değilse oluşturun:vi /opt/apigee/customer/application/message-processor.properties
- Mülkü istediğiniz gibi ayarlayın:
conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
- Özellikler dosyasının "Apigee" kullanıcısına ait olduğundan emin olun:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- 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: |
|
"refresh_token_expires_in" : "0"
.<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: |
|
<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: |
|
Bulunma: |
isteğe bağlı |
Tür: | boolean |
Geçerli değerler: |
|
İzin türüyle kullanılır: |
|
<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: |
|
<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: |
|
<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: |
|
<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: |
|
<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.
proxy.pathsuffix
'dan türetilmiş) ile yapılandırılmışsa API ürün değişkenleri otomatik olarak doldurulur. Flow.resource.name değişkeninin açıkça ayarlanması gerekli değildir.
API ürünlerinin geçerli ortamlar ve API proxy'leriyle yapılandırılmadığı durumlarda, akıştaki API ürün değişkenlerini doldurmak için flow.resource.name
açıkça ayarlanmalıdır. Ürün yapılandırmasıyla ilgili ayrıntılar için API'leri Yayınlamak için Edge Management API'yi Kullanma başlıklı makaleye bakın.
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 |
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 |
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 |
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 Not: Hem |
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\ |
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 |
GenerateAccessToken |
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 |
|
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 |
Not: |
InvalidOperation |
Not: |
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.
<GenerateResponse>
, false
olarak ayarlanmışsa bir hata oluştuğunda bu değişkenler doldurulur. <GenerateResponse>
değeri, true
ise hata oluşursa politika hemen istemciye yanıt döndürür. Hata akışı atlanır ve bu değişkenler doldurulmaz. Daha fazla bilgi için Politika hataları hakkında bilmeniz gerekenler bölümüne bakın.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: |
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.
errorcode
bölümünü yakalamaktır. Değişebileceği için faultstring
içindeki metne güvenmeyin.<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.
- Düzenlemek için şu dosyayı açın:
/opt/apigee/customer/application/message-processor.properties
- Bir jetonun süresi dolduktan sonra kalıcı olarak silinmeden önce beklenecek saniye sayısını ayarlamak için şu özelliği ekleyin:
conf_keymanagement_oauth.access.token.purge.after.seconds=<number of seconds>
- Mesaj işlemcisini yeniden başlatın. Örneğin:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
<ExpiresIn>
ve <RefreshTokenExpiresIn>
özelliklerini kullanarak jeton geçerlilik süresini ayarlayabilirsiniz.
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.
-
OAuthV2 politikasında
<ExpiresIn>
ve<RefreshTokenExpiresIn>
özellikleri için pozitif değerler belirleyin. Değerler milisaniye cinsinden belirtilir. Örneğin:<ExpiresIn>1000</ExpiresIn> <RefreshTokenExpiresIn>10000</RefreshTokenExpiresIn>
-
Proxy'yi yeniden dağıtın.
-
Kuruluşunuz için jeton silme özelliklerini güncellemek üzere bu API'yi kullanın:
POST https://<host-name>/v1/organizations/<org-name>
Yük:
<Organization name="AutomationOrganization"> <Description>Desc</Description> <Properties> <Property name="keymanagement.oauth20.access.token.purge">true</Property> <Property name="keymanagement.oauth20.access.token.purge.after.seconds">120</Property> </Properties> </Organization>
-
Mesaj işlemcisini yeniden başlatın. Örneğin:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Bu API, jeton temizleme özelliğini AutomationOrganization adlı kuruluş için "doğru" olarak ayarlar. Bu durumda, erişim jetonu hem jetonun hem de yenileme jetonunun süresi dolduktan 120 saniye sonra veritabanından silinir.
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"}