Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. info
Ne?
OAuthV2, OAuth 2.0 erişim izni türü işlemlerini gerçekleştirmek için kullanılan ç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ını inceleyin. Kaynaklara, örneklere, videolara ve daha fazlasına bağlantılar sağlar. Bu politikanın çalışan bir uygulamada nasıl kullanıldığını iyi bir şekilde gösteren GitHub'daki gelişmiş OAuth örneğini inceleyin.
Ö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şleme 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 Authorization üstbilgisindeki erişim jetonlarını Bearer önekiyle kabul eder. Bu varsayılanı <AccessToken> öğesiyle değiştirebilirsiniz.
GenerateAccessToken
Erişim jetonları oluşturma
Desteklenen her yetki türü için erişim jetonlarının nasıl isteneceğiyle ilgili örnekleri Erişim jetonları ve yetkilendirme kodları isteme bölümünde bulabilirsiniz. Konu, bu işlemlerle ilgili örnekler içerir:
- Yetkilendirme kodu
- İstemci kimlik bilgileri
- Örtülü (Implicit)
- Şifre
GenerateAuthorizationCode
Yetkilendirme kodu oluşturma
Yetkilendirme kodlarının nasıl isteneceğiyle ilgili ö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ğiyle ilgili ö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 erişim jetonu oluşturmanız gerekebilir. Örneğin, bunu bir arka uç hizmetinde yapılan bazı özel doğrulama işlemlerine yanıt olarak yapabilirsiniz. Bu örnekte, kullanım alanı hem erişim kodu hem de yenileme kodu gerektirdiğinden örtülü izin türü kullanılamaz. Bu durumda, jetonu oluşturmak için şifre izin türünü kullanacağız. Gördüğünüz gibi, bu işlemin çalışmasını sağlamanın yolu, JavaScript politikası içeren bir yetkilendirme isteği başlığı iletmektir.
Öncelikle ö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 yerleştirirseniz politikada doğru giriş parametreleri belirtilmiş olsa bile 401 Yetkisiz hatasıyla başarısız olur. Bu sorunu çözmek için bir yetkilendirme isteği başlığı ayarlamanız gerekir.
Yetkilendirme üstbilgisi, Base64 kodlu client_id:client_secret ile temel erişim şemasını içermelidir.
Bu üstbilgiyi, OAuthV2 politikasının hemen öncesine yerleştirilmiş bir JavaScript politikasıyla aşağıdaki gibi ekleyebilirsiniz. "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 "Temel kimlik doğrulama kimlik bilgilerini kodlama" bölümüne bakın.
Öğe referansı
Politika referansı, OAuthV2 politikasının öğelerini ve özelliklerini açıklar.
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. Gerekli 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ı |
Yok | Zorunlu |
continueOnError |
Bir politika başarısız olduğunda hata döndürmesi için Akış yürütmenin bir politikadan sonra bile 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 özelliğin desteği sonlandırıldı. |
false | Kullanımdan kaldırıldı |
<DisplayName> öğ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 |
|---|---|
| Varlık | İsteğe bağlı |
| Tür | Dize |
<AccessToken> öğesi
<AccessToken>request.header.access_token</AccessToken>
VerifyAccessToken, varsayılan olarak erişim jetonunun Authorization
üstbilgisinde gönderilmesini bekler.
Bu öğeyi kullanarak varsayılanı değiştirebilirsiniz. Örneğin, request.queryparam.access_token, erişim jetonunun access_token adlı bir sorgu parametresi olarak bulunması 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> öğesinin belirtildiği örnek:
curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"
|
Varsayılan: |
Yok |
|
Mevcut olma: |
İsteğe bağlı |
| Tür: | Dize |
| İşlemlerle birlikte kullanılır: |
|
<AccessTokenPrefix> öğesi
<AccessTokenPrefix>Bearer</AccessTokenPrefix>
Varsayılan olarak VerifyAccessToken, erişim jetonunun bir taşıyıcı jeton olarak Yetkilendirme üstbilgisinde gönderilmesini bekler. Örneğin:
-H "Authorization: Bearer Rft3dqrs56Blirls56a"
Şu anda yalnızca Bearer öneki desteklenmektedir.
|
Varsayılan: |
Taşıyıcı |
|
Mevcut olma: |
İsteğe bağlı |
| Tür: | Dize |
| Geçerli değerler: |
Taşıyıcı |
| İşlemlerle birlikte 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 arayacağını belirtmenize olanak tanır. Örneğin, sorgu parametresi veya HTTP başlığı olarak gönderilebilir.
Örneğin request.queryparam.app_enduser, AppEndUser'ın sorgu parametresi olarak bulunması gerektiğini belirtir (ör. ?app_enduser=ntesla@theramin.com). Örneğin, bir HTTP üstbilgisinde AppEndUser'ın zorunlu olmasını sağlamak için bu değeri request.header.app_enduser olarak ayarlayın.
Bu ayarı sağladığınızda erişim jetonuna bir uygulama son kullanıcı kimliği ekleyebilirsiniz. Bu özellik, OAuth 2.0 erişim jetonlarını son kullanıcı kimliğine göre alabilmek veya iptal edebilmek istediğinizde 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 |
|
Mevcut olma: |
İsteğe bağlı |
| Tür: | Dize |
| Geçerli değerler: |
Çalışma zamanında politikaya erişilebilen tüm akış değişkenleri. |
| İzin türleriyle kullanılır: |
|
<Attributes/Attribute>
<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, ç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şkeninde veya değişmez dizede değer belirtmenize olanak tanır. Hem değişken hem de dize belirtirseniz akış değişkeninde belirtilen değer kullanılır. Değişken çözümlenemezse dize varsayılan değer olur.
Bu öğeyi kullanma hakkında daha fazla bilgi için Jetonları ve Yetkilendirme Kodlarını Özelleştirme başlıklı makaleyi inceleyin.
Yanıt içinde özel özellikleri gösterme veya gizleme
Bu politikanın GenerateResponse öğesini true olarak ayarlarsanız belirlediğiniz özel özellikler de dahil olmak üzere jetonun tam JSON gösteriminin yanıtta döndürüleceğini unutmayın. Bazı durumlarda, istemci uygulamalarına görünmemeleri için yanıtınızdaki özel özelliklerinizin bir kısmını veya tamamını 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ğinin değeri kalıcı olarak saklanmıyor. Oluşturulan yanıtta gizlemek istediğiniz özel özelliklere sahip bir erişim jetonu oluşturduğunuzu varsayalım. display=false ayarı bu hedefi gerçekleştirir. Ancak 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 bir parçasıdır.
Bir yetkilendirme koduna özel özellikler eklerseniz de aynı davranışla karşılaşırsınız. Bu kod kullanılarak bir erişim jetonu oluşturulduğunda, özel özellikler erişim jetonu yanıtında gösterilir. Bu, yine de amaçladığınız 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 bunların gösterimini false olarak ayarlayın. Bu durumda, GetOAuthV2Info politikasını kullanarak orijinal erişim jetonundan orijinal özel değerleri almanız gerekebilir.
- Yanıt içinde görmek istemediğiniz özel özellikleri manuel olarak ayıklamak için bir son işleme JavaScript politikası kullanın.
Jetonları ve Yetkilendirme Kodlarını Özelleştirme başlıklı makaleyi de inceleyin.
|
Varsayılan: |
|
|
Mevcut olma: |
İsteğe bağlı |
| Geçerli değerler: |
|
| İzin türleriyle kullanılır: |
|
<ClientId> öğesi
<ClientId>request.formparam.client_id</ClientId>
Çeşitli durumlarda, istemci uygulaması istemci kimliğini yetkilendirme sunucusuna göndermelidir. Bu öğe, Apigee'nin akış değişkeninde request.formparam.client_id müşteri kimliğini araması gerektiğini belirtir. ClientId öğesini başka bir değişkene ayarlama 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 ve istek gövdesinde belirtilir) |
|
Mevcut olma: |
İ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 istemci, yetkilendirme sunucusuna (Apigee Edge) bir yetkilendirme kodu göndermelidir. Bu öğe, Edge'in yetkilendirme kodunu nerede arayacağını 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 bulunması gerektiğini belirtir. Örneğin, ?auth_code=AfGlvs9. Örneğin, bir HTTP başlığında yetkilendirme kodunun zorunlu tutulması 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-urlencoded ve istek gövdesinde belirtilir) |
|
Mevcut olma: |
isteğe bağlı |
| Tür: | Dize |
| Geçerli değerler: | Çalışma zamanında politikaya erişilebilen 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 süresini milisaniye cinsinden zorunlu kılar. (Yenileme jetonları için <RefreshTokenExpiresIn> değerini kullanın.) Geçerlilik bitiş saati değeri, sistem tarafından oluşturulan bir değerin yanı sıra <ExpiresIn> değeridir. <ExpiresIn>, -1 olarak ayarlanırsa jetonun veya kodun geçerlilik süresi, maksimum OAuth erişim jetonu geçerlilik süresine göre dolar.
<ExpiresIn> belirtilmezse sistem, sistem düzeyinde yapılandırılmış bir varsayılan değer uygular.
Son kullanma süresi, çalışma zamanında sabit kodlanmış bir varsayılan değer kullanılarak veya bir akış değişkenine referans verilerek de ayarlanabilir. Örneğin, bir jeton geçerlilik bitimi değerini anahtar/değer çifti haritasında saklayabilir, alabilir, bir değişkene atayabilir ve politikada buna referans verebilirsiniz. Örneğin,
kvm.oauth.expires_in.
Apigee Edge for Public Cloud ile Edge, erişildikten sonra en az 180 saniye boyunca aşağıdaki öğeleri önbellekte tutar.
- OAuth erişim jetonları. Bu, iptal edilen bir jetonun, önbellek sınırı sona erene kadar üç dakikaya kadar başarılı olabileceği anlamına gelir.
- Key Management Service (KMS) varlıkları (Uygulamalar, Geliştiriciler, API Ürünleri).
- OAuth jetonları ve KMS varlıklarındaki özel özellikler.
Aşağıdaki kıta, bir akış değişkenini ve varsayılan değeri 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 jetonun süresinin dolmasını zorlamayı desteklemez. Jetonun süresinin dolmasını zorlamanız gerekiyorsa (örneğin, bir koşula bağlı olarak) olası bir çözüm bu Apigee Topluluğu gönderisinde açıklanmıştır.
Varsayılan olarak, süresi dolmuş erişim jetonları, geçerlilik süresi dolduktan 3 gün sonra Apigee Edge sisteminden otomatik olarak temizlenir. Ayrıca Erişim jetonlarını temizleme başlıklı makaleyi de inceleyin.
Private Cloud: Private Cloud için Edge yüklemesinde varsayılan değer, conf_keymanagement_oauth_auth_code_expiry_time_in_millis özelliği tarafından ayarlanır.
Bu özelliği ayarlamak için:
message-processor.propertiesdosyasını bir düzenleyicide açın. Dosya yoksa oluşturun:vi /opt/apigee/customer/application/message-processor.properties
- Özelliği istediğiniz gibi ayarlayın:
conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
- Özellikler dosyasının sahibi "apigee" kullanıcısı olmalıdır:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Mesaj İşleyici'yi 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ğeri uygular. |
|
Mevcut olma: |
İ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 bir erişim jetonunun (Apigee Edge tarafından oluşturulmayan bir erişim jetonu) nerede bulunacağını bildirir.
request.queryparam.external_access_token değişkeni, harici erişim jetonunun sorgu parametresi olarak bulunması gerektiğini gösterir. Örneğin, ?external_access_token=12345678. Harici erişim jetonunun bir HTTP üst bilgisinde zorunlu kılınması için örneğ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 yanlışsa veya mevcut değilse Edge, client_id ve client_secret'i 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ış |
|
Mevcut olma: |
İ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 bir yetkilendirme kodunun (Apigee Edge tarafından oluşturulmayan bir yetkilendirme kodu) nerede bulunacağını bildirir.
request.queryparam.external_auth_code değişkeni, harici yetkilendirme kodunun sorgu parametresi olarak bulunması gerektiğini gösterir. Örneğin, ?external_auth_code=12345678. Harici kimlik doğrulama kodunun bir HTTP üstbilgisinde zorunlu olmasını sağlamak için örneğin bu değeri request.header.external_auth_code olarak ayarlayın. Üçüncü Taraf OAuth Jetonlarını Kullanma başlıklı makaleyi de inceleyin.
<ExternalRefreshToken> öğesi
<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>
Apigee Edge'e harici bir yenileme jetonunun (Apigee Edge tarafından oluşturulmayan bir yenileme jetonu) nerede bulunacağını bildirir.
request.queryparam.external_refresh_token değişkeni, harici yenileme jetonunun sorgu parametresi olarak bulunması gerektiğini gösterir. Örneğin, ?external_refresh_token=12345678. Harici yenileme jetonunun bir HTTP üstbilgisinde zorunlu kılınması için örneğ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şturup 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, politika işleviyle ilgili değerlerle bir dizi akış değişkeni doldurulur. Örneğin, oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code adlı bir akış değişkeni, yeni oluşturulan yetkilendirme koduyla doldurulur. Yanıtın expires_in değerinin saniye cinsinden ifade edildiğini unutmayın.
|
Varsayılan: |
yanlış |
|
Mevcut olma: |
İ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 olarak ayarlanırsa politika, ContinueOnError özniteliği doğru olarak ayarlandığında yanıt oluşturup döndürür. false (varsayılan) ise yanıt gönderilmez. Bunun yerine, bir dizi akış değişkeni, politikanın işleviyle ilgili değerlerle doldurulur.
|
Varsayılan: |
yanlış |
|
Mevcut olma: |
İ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, istekte iletilen izin türü parametresinin nerede bulunacağını bildirir. OAuth 2.0 spesifikasyonuna göre, erişim jetonları ve yetkilendirme kodları için yapılan isteklerde izin türü sağlanmalıdır. Değişken bir üstbilgi, sorgu parametresi veya form parametresi (varsayılan) olabilir.
Örneğin request.queryparam.grant_type, şifrenin sorgu parametresi olarak bulunması gerektiğini belirtir (ör. ?grant_type=password).
HTTP üstbilgisinde yetki türünün zorunlu olmasını sağlamak için örneğin bu değeri request.header.grant_type olarak ayarlayın. Ayrıca Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleyi de inceleyin.
|
Varsayılan: |
request.formparam.grant_type (bir x-www-form-urlencoded ve istek gövdesinde belirtilir) |
|
Mevcut olma: |
İ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: |
|
<Operation> öğesi
<Operation>GenerateAuthorizationCode</Operation>
Politika tarafından yürütülen OAuth 2.0 işlemi.
|
Varsayılan: |
|
|
Mevcut olma: |
İ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 bilgilerinin (şifre ve kullanıcı adı) OAuthV2 politikasına sunulması 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, şifreyi bir sorgu parametresi kullanarak jeton isteğinde iletebilir ve öğeyi şu şekilde ayarlayabilirsiniz:
<PassWord>request.queryparam.password</PassWord>. Şifrenin HTTP üstbilgisinde zorunlu olması için 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. Jeton oluşturma politikası yürütülmeden önce değer isteğini alıp bir kimlik sağlayıcıya göndermek API geliştiricisinin sorumluluğundadı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 ve istek gövdesinde belirtilmiş) |
|
Mevcut olma: |
İsteğe bağlı |
| Tür: | Dize |
| Geçerli değerler: | Çalışma zamanında politikada kullanılabilen tüm akış değişkenleri. |
| İzin türleriyle kullanılır: | şifre |
<RedirectUri> öğesi
<RedirectUri>request.queryparam.redirect_uri</RedirectUri>
Edge'in, istekte redirect_uri parametresini nerede arayacağını 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 kodu (yetkilendirme kodu verme türü için) veya erişim jetonu (örtülü verme türü için) nereye göndereceğini bildirir. Bu parametrenin ne zaman gerekli, ne zaman isteğe bağlı olduğunu ve nasıl kullanıldığını anlamak önemlidir:
-
(zorunlu) İstekle ilişkili geliştirici uygulamasına bir geri çağırma URL'si kaydedilmişse ve istekte
redirect_urivarsa ikisi tam olarak eşleşmelidir. Eşleşmemeleri durumunda hata döndürülür. Edge'de geliştirici uygulamalarını kaydetme ve geri çağırma URL'si belirtme hakkında bilgi edinmek için Uygulamaları 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_urieksikse Edge, kaydedilen geri çağırma URL'sine yönlendirir. - (zorunlu) Geri arama URL'si kaydedilmemişse
redirect_urigereklidir. Bu durumda Edge'in HERHANGİ BİR URL'yi kabul edeceğini unutmayın. Bu durum güvenlik sorununa yol açabilir ve bu nedenle yalnızca güvenilir istemci uygulamalarıyla kullanılmalıdır. İstemci uygulamalarına güvenilmiyorsa en iyi uygulama, geri çağırma URL'sinin her zaman kaydedilmesini zorunlu kılmaktır.
Bu parametreyi bir sorgu parametresinde veya bir üstbilgide gönderebilirsiniz. request.queryparam.redirect_uri değişkeni, RedirectUri'nin ?redirect_uri=login.myapp.com gibi bir sorgu parametresi olarak bulunması gerektiğini gösterir. Örneğin, bir HTTP üstbilgisinde RedirectUri'nin zorunlu olmasını sağlamak için bu değeri request.header.redirect_uri olarak ayarlayın. Ayrıca Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleyi de inceleyin.
|
Varsayılan: |
request.formparam.redirect_uri (x-www-form-urlencoded ve istek gövdesinde belirtilir) |
|
Mevcut olma: |
İ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. |
<RefreshToken> öğesi
<RefreshToken>request.queryparam.refreshtoken</RefreshToken>
Yenileme jetonu kullanarak erişim jetonu isterken isteğe yenileme jetonunu eklemeniz gerekir. Bu öğe, Edge'in yenileme jetonunu nerede arayacağını belirtmenize olanak tanır. Örneğin, sorgu parametresi, HTTP başlığı veya form parametresi (varsayılan) olarak gönderilebilir.
request.queryparam.refreshtoken değişkeni, yenileme jetonunun sorgu parametresi olarak bulunması gerektiğini gösterir (örneğin, ?refresh_token=login.myapp.com). Örneğin, bir HTTP üstbilgisinde RefreshToken'ın zorunlu olması için bu değeri request.header.refresh_token olarak ayarlayın. Ayrıca Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleyi de inceleyin.
|
Varsayılan: |
request.formparam.refresh_token (bir x-www-form-urlencoded ve istek gövdesinde belirtilir) |
|
Mevcut olma: |
İ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: |
|
<RefreshTokenExpiresIn> öğesi
<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>
Yenileme jetonlarının geçerlilik süresini milisaniye cinsinden zorunlu kılar. Geçerlilik bitiş saati değeri, sistem tarafından oluşturulan değer ile <RefreshTokenExpiresIn> değerinin toplamıdır. <RefreshTokenExpiresIn>, -1 olarak ayarlanırsa yenileme jetonunun süresi maksimum OAuth yenileme jetonu son kullanma tarihi'ne göre dolar. <RefreshTokenExpiresIn> belirtilmemişse sistem, sistem düzeyinde yapılandırılmış bir varsayılan değer uygular. Varsayılan sistem ayarları hakkında daha fazla bilgi için Apigee Edge Destek Ekibi ile iletişime geçin.
Son kullanma süresi, çalışma zamanında sabit kodlanmış bir varsayılan değer kullanılarak veya bir akış değişkenine referans verilerek de ayarlanabilir. Örneğin, bir jeton geçerlilik bitimi değerini anahtar/değer çifti haritasında saklayabilir, alabilir, bir değişkene atayabilir ve politikada buna referans verebilirsiniz. Örneğin, kvm.oauth.expires_in.
Aşağıdaki kıta, bir akış değişkenini ve varsayılan değeri 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 için Edge yüklemesinde varsayılan değer, conf_keymanagement_oauth_refresh_token_expiry_time_in_millis özelliği tarafından ayarlanır.
Bu özelliği ayarlamak için:
message-processor.propertiesdosyasını bir düzenleyicide açın. Dosya yoksa oluşturun:vi /opt/apigee/customer/application/message-processor.properties
- Özelliği istediğiniz gibi ayarlayın:
conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
- Özellikler dosyasının sahibi "apigee" kullanıcısı olmalıdır:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- Mesaj İşleyici'yi 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) |
|
Mevcut olma: |
İsteğe bağlı |
| Tür: | Tamsayı |
| Geçerli değerler: |
|
| İzin türleriyle kullanılır: |
|
<ResponseType> öğesi
<ResponseType>request.queryparam.response_type</ResponseType>
Bu öğe, istemci uygulamasının hangi izin türünü istediği konusunda Edge'i bilgilendirir. Yalnızca yetkilendirme kodu ve implicit izin türü akışlarıyla kullanılır.
Edge, varsayılan olarak response_type sorgu parametresinde yanıt türü değerini 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 ve istek gövdesinde belirtilir) |
|
Mevcut olma: |
İsteğe bağlıdır. 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: |
|
<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 gönderildiğinde Apigee Edge tarafından yeni bir yenileme jetonu verilir.
|
Varsayılan: |
|
|
Mevcut olma: |
isteğe bağlı |
| Tür: | boolean |
| Geçerli değerler: |
|
| İzin türüyle birlikte kullanılır: |
|
<Scope> öğesi
<Scope>request.queryparam.scope</Scope>
Bu öğe, GenerateAccessToken veya GenerateAuthorizationCode politikalarından birinde varsa jetona ya da koda hangi kapsamların verileceğini belirtmek için kullanılır. Bu değerler genellikle bir istemci uygulamasından gelen istekte politikaya iletilir. Öğeyi bir akış değişkeni alacak şekilde yapılandırabilirsiniz. Böylece, kapsamların istekte nasıl iletileceğini seçebilirsiniz. Aşağıdaki örnekte request.queryparam.scope, kapsamın sorgu parametresi olarak bulunması gerektiğini gösterir (örneğin, ?scope=READ). Örneğin, bir HTTP üstbilgisinde kapsamın zorunlu olmasını sağlamak için bu değeri request.header.scope olarak ayarlayın.
Bu öğe bir "VerifyAccessToken" politikasında görünüyorsa politika tarafından hangi kapsamların zorunlu kılınacağını 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>
Ayrıca OAuth2 kapsamlarıyla çalışma ve Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleleri de inceleyin.
|
Varsayılan: |
Kapsam yok |
|
Mevcut olma: |
İsteğe bağlı |
| Tür: | Dize |
| Geçerli değerler: |
Generate* politikalarıyla kullanılıyorsa akış değişkeni. VerifyAccessToken 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 gereken durumlarda bu öğe, Edge'in durum değerlerini nerede arayacağını belirtmenize olanak tanır. Örneğin, 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 sorgu parametresi olarak mevcut olması gerektiğini gösterir (örneğin, ?state=HjoiuKJH32). Bir HTTP başlığında eyaletin zorunlu olmasını sağlamak için örneğin bu değeri request.header.state olarak ayarlayın. Ayrıca Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleyi de inceleyin.
|
Varsayılan: |
Durum yok |
|
Mevcut olma: |
İsteğe bağlı |
| Tür: | Dize |
| Geçerli değerler: | Çalışma zamanında politikaya 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ı söyler. Aksi takdirde, bu veriler kalıcı olmaz.
|
Varsayılan: |
yanlış |
|
Mevcut olma: |
İ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'deki bir OAuth jetonu 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ı makaleye bakın. İzin türü, jeton isteklerinde grant_type
parametresinde iletilir.
Desteklenen hibe türleri belirtilmezse yalnızca authorization_code ve implicit hibe türlerine izin verilir. Ayrıca, Apigee Edge'in bir istemci isteğinde iletilen grant_type parametresini nerede arayacağını belirtmek için kullanılan daha üst düzey bir öğe olan <GrantType> öğesine de bakın. Edge, grant_type parametresinin değerinin desteklenen yetkilendirme türlerinden biriyle eşleşmesini sağlar.
|
Varsayılan: |
authorization _code ve implicit |
|
Mevcut olma: |
Zorunlu |
| Tür: | Dize |
| Geçerli değerler: |
|
<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 de inceleyin. <Token> öğesi, iptal edilecek jetonun kaynağını tanımlayan akış değişkenini belirler. Geliştiricilerin erişim jetonlarını access_token adlı sorgu parametreleri olarak göndermesi bekleniyorsa (ör. 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 bilgilerinin (şifre ve kullanıcı adı) OAuthV2 politikasına sunulması 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 bir HTTP üstbilgisinde zorunlu olması 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 yalnızca bunların mevcut olduğunu doğrular. Jeton oluşturma politikası yürütülmeden önce değer isteğini alıp bir kimlik sağlayıcıya göndermek API geliştiricisinin sorumluluğundadır.
Ayrıca Erişim jetonları ve yetkilendirme kodları isteme başlıklı makaleyi de inceleyin.
|
Varsayılan: |
request.formparam.username (x-www-form-urlencoded ve istek gövdesinde belirtilir) |
|
Mevcut olma: |
İ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ı ayarlandıktan sonra, VerifyAccessToken işlemini belirten ilgili bir OAuthV2 politikası, korunan kaynağı kullanıma sunan akışa eklenir.
Örneğin, bir API'ye yapılan tüm isteklerin yetkilendirilmesini sağlamak için aşağıdaki politika, erişim jetonu doğrulamayı 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 isteği PreFlow'a aşağıdaki şekilde ekleyin:
<PreFlow>
<Request>
<Step><Name>VerifyOAuthAccessToken</Name></Step>
</Request>
</PreFlow>Aşağıdaki isteğe bağlı öğeler, VerifyAccessToken işlemi için varsayılan ayarları geçersiz kılmak üzere kullanılabilir.
| Ad | Açıklama |
|---|---|
| Kapsam |
Boşlukla ayrılmış kapsam listesi. Listelenen kapsamların en az biri erişim jetonunda varsa doğrulama başarılı olur. Örneğin, aşağıdaki politika, erişim jetonunun listelenen kapsamların en az birini içerdiğinden emin olmak için erişim jetonunu kontrol eder. READ veya WRITE varsa 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 OAuth 2.0 spesifikasyonuna göre uygulama tarafından Authorization HTTP üstbilgisinde sunulması beklenir. Erişim jetonunun, sorgu parametresi veya Authorization dışında bir ada sahip HTTP üstbilgisi 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 başlıklı makaleleri de inceleyin.
İstek değişkeni konumlarını belirtme
Politika, her izin türü için istek mesajlarındaki konum veya gerekli bilgilerle ilgili varsayımlarda bulunur. Bu varsayımlar, OAuth 2.0 spesifikasyonuna dayanmaktadı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, istemci kimliğinin, yönlendirme URI'sinin ve kapsamın konumunu belirtebilirsiniz. Bunlar HTTP üstbilgileri, sorgu parametreleri veya form parametreleri olarak belirtilebilir.
Aşağıdaki örnekte, gerekli yetkilendirme kodu parametrelerinin konumunu 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, istemci uygulamanızın tabanını 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 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 özellikler sağlar. Örneğin, bu değişkenlerden herhangi birini okumak ve akışta daha sonra gerektiği şekilde kullanmak için AssignMessage veya JavaScript politikası kullanabilirsiniz. Bu değişkenler hata ayıklama amacıyla da kullanılabilir.
proxy.pathsuffix'den türetilir) yapılandırılmışsa API ürün değişkenleri otomatik olarak doldurulur. flow.resource.name değişkeninin açıkça ayarlanması gerekmez.
API ürünleri geçerli ortamlar ve API proxy'leriyle yapılandırılmadığında, akışta 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 üzere Edge Management API'yi kullanma başlıklı makaleyi inceleyin.
Jetonla ilgili 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şkili 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ğrulanacak erişim jetonu. |
accesstoken.{custom_attribute} |
Erişim jetonunda adlandırılmış bir özel özellik. |
issued_at |
Erişim jetonunun düzenlendiği tarih, milisaniye cinsinden Unix epoch zamanı olarak ifade edilir. |
expires_in |
Erişim jetonunun geçerlilik bitiş zamanı. Saniye cinsinden ifade edilir. ExpiresIn öğesi, geçerlilik süresini 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şkili API ürününün adlandırılmış özel ö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 gösterir. Değer |
Uygulamaya özel değişkenler
Bu değişkenler, jetonla ilişkili geliştirici uygulamasıyla 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 özel değişkenler
app.appType "Company" ise şirket özellikleri, app.appType "Developer" 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ış bir özel özelliği. |
Şirkete özgü değişkenler
app.appType "Company" ise şirket özellikleri, app.appType "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ış bir özel özelliği. |
GenerateAuthorizationCode işlemi
Bu değişkenler, GenerateAuthorizationCode işlemi başarıyla yürütüldüğünde 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 bilgisi verme 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ıtın expires_in değerinin 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 ayarlanır. |
developer.email |
Jetonla ilişkili geliştirici uygulamasının sahibi olan kayıtlı geliştiricinin e-posta adresi. |
organization_name |
Yetkilinin çalıştığı kuruluş. |
api_product_list |
Jetonun karşılık gelen geliştirici uygulamasıyla ilişkili ürünlerin listesi. |
refresh_count |
|
refresh_token |
Oluşturulan yenileme jetonu. Yenileme jetonlarının, istemci kimlik bilgileri atama türü için 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 gösterimidir. Örneğin, "Çar, 21 Ağu 2013 19:16:47 UTC" zaman damgası değeri 1377112607413'e 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 |
Jetonun geçerlilik süresi (saniye cinsinden). Ayrıntılar için <ExpiresIn> öğesine bakın. |
Hata referansı
Bu bölümde, döndürülen hata kodları ve hata mesajları ile bu politika bir hata tetiklediğinde Edge tarafından ayarlanan hata değişkenleri açıklanmaktadır. Hataları ele almak için hata kuralları geliştiriyorsanız bu bilgileri bilmeniz önemlidir. Daha fazla bilgi edinmek için Politika hataları hakkında bilmeniz gerekenler ve Hataları ele alma başlıklı makaleleri inceleyin.
Çalışma zamanı hataları
Bu hatalar, politika yürütüldüğünde ortaya çıkabilir.
| Hata kodu | HTTP durumu | Neden | İşlemler tarafından atılır. |
|---|---|---|---|
steps.oauth.v2.access_token_expired |
401 | Erişim jetonunun süresi doldu. |
VerifyAccessToken |
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şkili API ürünlerinden hiçbirinde mevcut değildir. | VerifyAccessToken |
steps.oauth.v2.FailedToResolveAccessToken |
500 | Politika, <AccessToken> öğesinde belirtilen bir değişkende erişim jetonu bulmasını bekledi ancak değişken çözülemedi. |
GenerateAccessToken |
steps.oauth.v2.FailedToResolveAuthorizationCode |
500 | Politika, <Code> öğesinde belirtilen bir değişkende yetkilendirme kodu bulmasını bekledi ancak değişken çözülemedi. |
GenerateAuthorizationCode |
steps.oauth.v2.FailedToResolveClientId |
500 | Politika, istemci kimliğini <ClientId> öğesinde belirtilen bir değişkende bulmasını bekledi ancak değişken çözülemedi. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.FailedToResolveRefreshToken |
500 | Politika, <RefreshToken> öğesinde belirtilen bir değişkende yenileme jetonu bulmasını bekledi ancak değişken çözülemedi. |
RefreshAccessToken |
steps.oauth.v2.FailedToResolveToken |
500 | Politika, <Tokens> öğesinde belirtilen bir değişkende jeton bulmasını bekledi ancak değişken çözülemedi. |
ValidateToken |
steps.oauth.v2.InsufficientScope |
403 | İstekte sunulan erişim jetonunun kapsamı, erişim jetonunu doğrulama politikasında belirtilen kapsamla eşleşmiyor. 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ı, politikanın Not: Mevcut hata kuralı koşullarını, hem |
GenerateAccessToken RefreshAccessToken |
steps.oauth.v2.InvalidRequest |
400 | Bu hata adı, genellikle istekte eksik veya yanlış parametreler gönderildiğinde olmak üzere birden fazla farklı hata türü için kullanılır. <GenerateResponse> false olarak ayarlanmışsa hata adı ve nedeni gibi hata ayrıntılarını almak için hata değişkenlerini (aşağıda açıklanmıştır) kullanın. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.InvalidAccessToken |
401 | Yetkilendirme başlığında gerekli olan "Bearer" kelimesi yok. Örneğin: Authorization: Bearer your_access_token |
VerifyAccessToken |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound |
401 |
API proxy'si, erişim jetonuyla ilişkili üründe değil. İpuçları: Erişim jetonuyla ilişkili ürünün doğru şekilde yapılandırıldığından emin olun. Örneğin, kaynak yollarında joker karakter kullanıyorsanız joker karakterlerin doğru şekilde kullanıldığından emin olun. Ayrıntılar için API ürünleri oluşturma başlıklı makaleyi inceleyin. Bu hatanın nedenleri hakkında daha fazla bilgi için bu Apigee Topluluk gönderisine de göz atın. |
VerifyAccessToken |
steps.oauth.v2.InvalidClientIdentifier |
500 |
Bu hata adı, politikanın |
GenerateAccessToken |
steps.oauth.v2.InvalidParameter |
500 | Politikada bir erişim jetonu veya yetkilendirme kodu belirtilmelidir. İkisi birden belirtilmemelidir. | 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 meydana gelir. |
ValidateToken InvalidateToken |
steps.oauth.v2.MissingParameter |
500 | Yanıt türü token ancak herhangi bir bağış türü belirtilmemiş. |
GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.UnSupportedGrantType |
500 |
İstemci, politika tarafından desteklenmeyen bir izin türü belirtmiş (<SupportedGrantTypes> öğesinde listelenmemiş) Not: Şu anda desteklenmeyen izin türü hatalarının doğru şekilde atılmamasına yol açan bir hata var. Desteklenmeyen bir izin türü hatası oluşursa proxy, beklendiği gibi Hata Akışına girmez. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
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 bağış türü belirtilmiş. Geçerli türlerin listesi için politika referansına bakın. |
ExpiresInNotApplicableForOperation |
<Operations> öğesinde belirtilen işlemlerin geçerlilik süresini desteklediğinden emin olun. Örneğin, VerifyToken işlemi bunu yapmaz. |
RefreshTokenExpiresInNotApplicableForOperation |
<Operations> öğesinde belirtilen işlemlerin yenileme jetonu geçerlilik süresini desteklediğinden emin olun. Örneğin, VerifyToken işlemi bunu yapmaz. |
GrantTypesNotApplicableForOperation |
<SupportedGrantTypes> bölümünde belirtilen izin türlerinin, belirtilen işlem için desteklendiğinden emin olun. |
OperationRequired |
Bu politikada Not: |
InvalidOperation |
Bu politikada Not: |
TokenValueRequired |
<Tokens> öğesinde bir jeton <Token> değeri belirtmeniz gerekir. |
Hata değişkenleri
Bu değişkenler, bu politika çalışma zamanında bir hata tetiklediğinde ayarlanır.
<GenerateResponse>, false olarak ayarlanırsa hata oluştuğunda bu değişkenler doldurulur. <GenerateResponse> true ise politika, hata meydana gelirse istemciye hemen 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 başlıklı makaleyi inceleyin.| Değişkenler | Konum | Örnek |
|---|---|---|
fault.name="fault_name" |
fault_name, yukarıdaki Yazılım hataları tablosunda listelenen hatanın adıdır. Hata adı, hata kodunun son kısmıdır. | fault.name = "InvalidRequest" |
oauthV2.policy_name.failed |
policy_name, hatayı atan politikanın kullanıcı tarafından belirtilen adıdır. | oauthV2.GenerateAccesstoken.failed = true |
oauthV2.policy_name.fault.name |
policy_name, hatayı atan politikanın kullanıcı tarafından belirtilen adıdır. | oauthV2.GenerateAccesstoken.fault.name = InvalidRequest
Not: VerifyAccessToken işleminde hata adı şu son eki içerir: |
oauthV2.policy_name.fault.cause |
policy_name, hatayı atan 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. faultstring içindeki metne güvenmeyin, çünkü bu metin değişebilir.<GenerateResponse> true ise politika, jeton ve kod oluşturan işlemler için bu biçimde hata döndürür. Tam liste için OAuth HTTP hata yanıtı referansı başlıklı makaleyi inceleyin.
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}<GenerateResponse> doğru ise politika, doğrulama ve doğrulama işlemleri için hataları bu biçimde döndürür. Tam liste için OAuth HTTP hata yanıtı referansı başlıklı makaleyi inceleyin.
{ { "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ı (.xsd) ile tanımlanır. Referans olarak politika şemaları GitHub'da mevcuttur.
Varsayılan OAuth yapılandırmasıyla çalışma
Apigee Edge'deki her kuruluş (ücretsiz deneme kuruluşu bile) bir OAuth jetonu uç noktasıyla sağlanır. Uç nokta, oauth adlı API proxy'sindeki 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ılı bilgi için OAuth uç noktalarını anlama başlıklı makaleyi inceleyin.
Erişim jetonlarını temizleme
Varsayılan olarak, hem erişim jetonunun hem de yenileme jetonunun (varsa) süresi dolduktan 3 gün (259.200 saniye) sonra OAuth2 jetonları 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 temizleme süresini kısaltmak isteyebilirsiniz.
Edge for Private Cloud kullanıyorsanız bu bölümde açıklandığı gibi kuruluş özelliklerini ayarlayarak bu varsayılanı değiştirebilirsiniz. (Süresi dolmuş jetonların 3 gün içinde temizlenmesi, Edge for Private Cloud 4.19.01 ve sonraki sürümler için geçerlidir. (Daha ö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: Yalnızca bu ayarlar uygulandıktan sonra oluşturulan jetonlar etkilenir. Ayarlar, daha önce oluşturulan jetonlar için geçerli değildir.
- Bu dosyayı düzenlemek için açın:
/opt/apigee/customer/application/message-processor.properties
- Bir jetonun süresi dolduktan sonra temizlenmeden önce beklenecek süreyi saniye cinsinden ayarlamak için aşağıdaki özelliği ekleyin:
conf_keymanagement_oauth.access.token.purge.after.seconds=<number of seconds>
- Mesaj işleyiciyi yeniden başlatın. Örneğin:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
<ExpiresIn> ve <RefreshTokenExpiresIn> özelliklerini kullanarak jetonun geçerlilik süresini ayarlayabilirsiniz.
Edge Private Cloud 4.15.07 için temizleme 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 değildir.
-
OAuthV2 politikasında
<ExpiresIn>ve<RefreshTokenExpiresIn>özellikleri için pozitif değerler ayarlayın. Değerler milisaniye cinsindendir. Örneğin:<ExpiresIn>1000</ExpiresIn> <RefreshTokenExpiresIn>10000</RefreshTokenExpiresIn>
-
Proxy'yi yeniden dağıtın.
-
Kuruluşunuzun jeton temizleme özelliklerini güncellemek için 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şleyiciyi yeniden başlatın. Örneğin:
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Bu API, AutomationOrganization adlı kuruluş için jeton temizleme özelliğini doğru olarak ayarlar. Bu durumda, hem jetonun hem de yenileme jetonunun süresi dolduktan 120 saniye sonra erişim jetonu veritabanından temizlenir.
RFC'ye uygun olmayan davranış
OAuthV2 politikası, belirli RFC uyumlu olmayan özellikler 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 karşılık gelen uyumlu özellikler gösterilmektedir.
| OAuthV2 şu değerleri döndürür: | RFC'ye uygun özellik: |
|---|---|
"token_type":"BearerToken" |
"token_type":"Bearer"
|
"expires_in":"3600" |
"expires_in":3600
(Uygun değer, dize değil sayıdır.) |
Ayrıca, grant_type = refresh_token olduğunda süresi dolmuş bir yenileme jetonunun hata yanıtı şöyledir:
{"ErrorCode" : "InvalidRequest", "Error" :"Refresh Token expired"}Ancak RFC'ye uygun yanıt şöyledir:
{"error" : "invalid_grant", "error_description" :"refresh token expired"}