Antipattern: OAuth jetonları için geçerlilik bitiş zamanı belirleme

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

Apigee Edge, API'leri güvenli hale getirmek için OAuth 2.0 çerçevesini sunar. OAuth2, en popüler açık standartlı, jeton tabanlı kimlik doğrulama ve yetkilendirme şemalarından biridir. Bu API, kullanıcıların kullanıcı adlarını ve şifrelerini belirtmelerine gerek kalmadan istemci uygulamalarının kullanıcılar adına API'lere erişmesini sağlar.

Apigee Edge, geliştiricilerin dört OAuth2 izin türünden (istemci kimlik bilgileri, şifre, dolaylı ve yetkilendirme kodu) herhangi birini OAuthv2 politikasını kullanarak uygulayarak erişim ve/veya jeton yenileme jetonları oluşturmasına olanak tanır. İstemci uygulamaları, güvenli API'leri kullanmak için erişim jetonları kullanır. Her erişim jetonunun kendi geçerlilik süresi vardır. Bu süre, OAuthv2 politikasından ayarlanabilir.

Yenileme jetonları, bazı izin türleriyle birlikte isteğe bağlı olarak erişim jetonlarıyla birlikte verilir. Yenileme jetonları, orijinal erişim jetonunun süresi dolduktan veya iptal edildikten sonra yeni ve geçerli erişim jetonları almak için kullanılır. Yenileme jetonlarının geçerlilik süresi OAuthv2 politikasından da ayarlanabilir.

Bu anti kalıp, OAuth jetonları için uzun bir geçerlilik süresi ayarlanması şeklindeki anti kalıpla ilgilidir.

Antipattern

OAuthv2 politikasında yenileme jetonu için geçerlilik süresi belirlenmemesi, OAuth jetonlarının birikmesine ve Cassandra düğümlerinde disk alanı kullanımının artmasına neden olur.

Aşağıdaki örnek OAuthV2 politikasında, <RefreshTokenExpiresIn> için eksik bir yapılandırma gösterilmektedir:

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <!--<RefreshTokenExpiresIn> is missing -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Yukarıdaki örnekte:

  • Erişim jetonu, 30 dakikalık makul ölçüde düşük bir geçerlilik bitiş süresiyle ayarlanmıştır.
  • Yenileme jetonunun süre sonu ayarlanmamış.
  • Yenileme jetonu veri deposunda (Cassandra) sonsuza kadar kalarak veri birikmesine neden olur.
  • Son kullanma tarihi olmayan bir yenileme jetonu, erişim jetonları oluşturmak için süresiz olarak kullanılabilir.
  • Bu API'ye giden trafik saniyede 10 istekse günde 864.000'e kadar jeton oluşturabilir.

Etki

  • Yenileme jetonu bir geçerlilik bitiş tarihi olmadan oluşturulursa bunun iki önemli sonucu vardır:
    • Yenileme jetonu, gelecekte herhangi bir zamanda, muhtemelen yıllar boyunca erişim jetonu almak için kullanılabilir. Bunun güvenlik üzerinde etkileri olabilir.
    • Cassandra'da yenileme jetonunu içeren satır hiçbir zaman silinmez. Bu işlem, Cassandra'da verilerin birikmesine neden olur.
  • Yeni bir erişim jetonu almak için yenileme jetonunu kullanır ancak bunun yerine yeni bir yenileme jetonu ve erişim jetonu oluşturursanız eski yenileme jetonu Cassandra'da kalır. Bunun sonucunda, yenileme jetonları Cassandra'da birikmeye devam ederek şişkinliğe daha fazla katkıda bulunacak, disk kullanımını artıracaktır ve daha ağır sıkıştırma işlemleri gerçekleştirilecek. Bu durum, Cassandra'da okuma/yazma gecikmelerine neden olacaktır.

En İyi Uygulama

Hem yenileme hem de erişim jetonları için uygun şekilde düşük bir geçerlilik bitiş süresi kullanın. Yenileme ve erişim jetonlarının geçerlilik bitiş sürelerini ayarlamak için en iyi uygulamayı inceleyin. Politikada hem erişim hem de yenileme jetonu için bir geçerlilik bitiş yapılandırması belirttiğinizden emin olun. Politika yapılandırması hakkında daha fazla bilgi için OauthV2 politika belgelerini inceleyin.

Özellikle Edge for Private Cloud müşterileri için en iyi uygulamalar

Bu bölümde, özellikle Private Cloud müşterileri için en iyi uygulamalar açıklanmaktadır.

Yenileme jetonunun varsayılan geçerlilik süresini belirtin

Varsayılan olarak, politika yapılandırmasında yenileme jetonu geçerlilik süresi belirtilmemişse Edge son kullanma tarihi olmayan bir yenileme jetonu oluşturur. Bu davranışı aşağıdaki prosedürü kullanarak geçersiz kılabilirsiniz:

  1. Bir mesaj işlemci düğümünde, yapılandırma geçersiz kılma dosyasını $APIGEE_ROOT/customer/application/message-processor.properties düzenleyin veya oluşturun. Bu dosyanın apigee kullanıcısı tarafından okunabildiğinden emin olun.
  2. Dosyaya şu satırı ekleyin:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
    Bu işlem, politikada herhangi bir değer belirtilmediyse varsayılan yenileme jetonunun geçerlilik süresini 1 saat olarak ayarlar. Bu varsayılan değeri işletmenizin ihtiyaçlarına göre değiştirebilirsiniz.
  3. Mesaj işlemci hizmetini yeniden başlatın:
    apigee-service edge-message-processor restart
  4. Yukarıdaki adımları tüm mesaj işlemci düğümlerinde tek tek tekrarlayın.

Cassandra'daki en iyi uygulamalar

Apigee'nin herkese açık olarak kullanıma sunulan en son sürümüne yükseltmeyi deneyin. Apigee, Apigee'deki jetonların yönetimini iyileştirip optimize etmeye devam eden düzeltme ve geliştirmeler yayınlamaya devam etmektedir. Apigee'deki erişim ve yenileme jetonları Cassandra'daki "kms" tuş alanında depolanır. Bu tuş alanının sıkıştırma stratejisinin LeveledCompactionStrategy olarak ayarlandığından emin olmalısınız. Aşağıdaki dizinlerin mevcut olmadığından emin olmanız gerekir:
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx#f0f0f0 and
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx

Ayrıca, jetonların silinmesi nedeniyle oluşturulan mezar taşlarının veri deposundan daha hızlı silinmesini sağlamak için kms.oauth_20_access_tokens tablosundaki gc_grace_seconds tutarını varsayılan 10 günden daha düşük bir değere (ör. 3 gün) düşürebilirsiniz.

Daha fazla bilgi