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ı
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
| Fault code | HTTP status | Cause | Thrown by operations |
|---|---|---|---|
steps.oauth.v2.access_token_expired |
401 | The access token is expired. |
VerifyAccessToken |
steps.oauth.v2.access_token_not_approved |
401 | The access token was revoked. | VerifyAccessToken |
steps.oauth.v2.apiresource_doesnot_exist |
401 | The requested resource does not exist any of the API products associated with the access token. | VerifyAccessToken |
steps.oauth.v2.FailedToResolveAccessToken |
500 | The policy expected to find an access token in a variable specified in the
<AccessToken> element, but the variable could not be resolved. |
GenerateAccessToken |
steps.oauth.v2.FailedToResolveAuthorizationCode |
500 | The policy expected to find an authorization code in a variable specified in the
<Code> element, but the variable could not be resolved. |
GenerateAuthorizationCode |
steps.oauth.v2.FailedToResolveClientId |
500 | The policy expected to find the Client ID in a variable specified in the
<ClientId> element, but the variable could not be resolved. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.FailedToResolveRefreshToken |
500 | The policy expected to find a refresh token in a variable specified in the
<RefreshToken> element, but the variable could not be resolved. |
RefreshAccessToken |
steps.oauth.v2.FailedToResolveToken |
500 | The policy expected to find a token in a variable specified in the
<Tokens> element, but the variable could not be resolved. |
ValidateToken |
steps.oauth.v2.InsufficientScope |
403 | The access token presented in the request has a scope that does not match the scope specified in the verify access token policy. To learn about scope, see Working with OAuth2 scopes. | VerifyAccessToken |
steps.oauth.v2.invalid_access_token |
401 | The access token sent from the client is invalid. | VerifyAccessToken |
steps.oauth.v2.invalid_client |
401 |
This error name is returned when the Note: It is recommended that you change existing fault rule
conditions to catch both the |
GenerateAccessToken RefreshAccessToken |
steps.oauth.v2.InvalidRequest |
400 | This error name is used for multiple different kinds of errors, typically for missing
or incorrect parameters sent in the request. If <GenerateResponse> is
set to false, use fault variables (described below) to retrieve details about
the error, such as the fault name and cause. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.InvalidAccessToken |
401 | The authorization header does not have the word "Bearer", which is required. For
example: Authorization: Bearer your_access_token |
VerifyAccessToken |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound |
401 |
The API proxy is not in the Product associated with the access token. Tips: Be sure that the product associated with the access token is configured correctly. For example, if you use wildcards in resource paths, be sure the wildcards are being used correctly. See Create API products for details. See also this Apigee Community post for more guidance on causes for this error. |
VerifyAccessToken |
steps.oauth.v2.InvalidClientIdentifier |
500 |
This error name is returned when the |
GenerateAccessToken |
steps.oauth.v2.InvalidParameter |
500 | The policy must specify either an access token or an authorization code, but not both. | GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.InvalidTokenType |
500 | The <Tokens>/<Token> element requires you to specify the token
type (for example, refreshtoken). If the client passes the wrong type, this
error is thrown. |
ValidateToken InvalidateToken |
steps.oauth.v2.MissingParameter |
500 | The response type is token, but no grant types are specified. |
GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.UnSupportedGrantType |
500 |
The client specified a grant type that is unsupported by the policy (not listed in the <SupportedGrantTypes> element). Note: There is currently a bug where unsupported grant type errors are not thrown correctly. If an unsupported grant type error occurs, the proxy does not enter the Error Flow, as expected. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
| Error name | Cause |
|---|---|
InvalidValueForExpiresIn |
For the |
InvalidValueForRefreshTokenExpiresIn |
For the <RefreshTokenExpiresIn> element, valid values are positive
integers and -1. |
InvalidGrantType |
An invalid grant type is specified in the <SupportedGrantTypes>
element. See the policy reference for a list of valid types. |
ExpiresInNotApplicableForOperation |
Be sure that the operations specified in the <Operations> element support expiration. For example, the VerifyToken operation does not. |
RefreshTokenExpiresInNotApplicableForOperation |
Be sure that the operations specified in the <Operations> element support refresh token expiration. For example, the VerifyToken operation does not. |
GrantTypesNotApplicableForOperation |
Be sure that the grant types specified in <SupportedGrantTypes> are supported for the specified operation. |
OperationRequired |
You must specify an operation in this policy using the Note: If the |
InvalidOperation |
You must specify a valid operation in this policy using the
Note: If the |
TokenValueRequired |
You must specify a token <Token> value in the
<Tokens> element. |
Fault variables
These variables are set when this policy triggers an error at runtime.
<GenerateResponse> is set to
false. If <GenerateResponse> is
true, the policy returns a response to the client immediately if an error occurs --
the error flow is skipped and these variables are not populated. For more information, see
What you need to
know about policy errors.| Variables | Where | Example |
|---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name = "InvalidRequest" |
oauthV2.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GenerateAccesstoken.failed = true |
oauthV2.policy_name.fault.name |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GenerateAccesstoken.fault.name = InvalidRequest
Note: For the VerifyAccessToken operation, the fault name includes this suffix: |
oauthV2.policy_name.fault.cause |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GenerateAccesstoken.cause = Required param : grant_type |
Example error response
These responses are sent back to the client if the <GenerateResponse>
element is true.
errorcode part of the error response. Do not rely on the text in the
faultstring, because it could change.If <GenerateResponse> is true, the policy returns errors
in this format for operations that generate tokens and codes. For a complete list, see see
OAuth HTTP error
response reference.
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}If <GenerateResponse> is true, the policy returns errors
in this format for verify and validate operations. For a complete list, see see OAuth HTTP error
response reference.
{ { "fault":{ "faultstring":"Invalid Access Token", "detail":{ "errorcode":"keymanagement.service.invalid_access_token" } } }
Example fault rule
<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"}