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 sağlar. OAuth2, en popüler açık standartlı, jeton tabanlı kimlik doğrulama ve yetkilendirme şemalarından biridir. Kullanıcıların kullanıcı adlarını ve şifrelerini paylaşmalarına gerek kalmadan istemci uygulamalarının kullanıcılar adına API'lere erişmesini sağlar.

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

Yenileme jetonları, bazı izin türlerinde erişim jetonlarıyla birlikte isteğe bağlı olarak 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ında da ayarlanabilir.

Bu anti-model, OAuth jetonları için uzun bir geçerlilik süresi belirleme anti-modeliyle ilgilidir.

Antipattern

OAuthv2 politikasında yenileme jetonu için geçerlilik süresi ayarlanmaması 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 jetonunun geçerlilik süresi 30 dakika gibi makul bir süreye ayarlanır.
  • Yenileme jetonunun son kullanma tarihi ayarlanmamış.
  • Yenileme jetonu, veri deposunda (Cassandra) kalıcı olarak saklandığından veri birikimine neden olur.
  • Geçerlilik süresi olmadan oluşturulan yenileme jetonları, erişim jetonları oluşturmak için süresiz olarak kullanılabilir.
  • Bu API'ye gelen trafik saniyede 10 istekse bir günde 864.000 jeton oluşturabilir.

Etki

  • Yenileme jetonu geçerlilik süresi olmadan oluşturulursa iki önemli sonuç ortaya çıkar:
    • Yenileme jetonu, erişim jetonu almak için gelecekte herhangi bir zamanda (muhtemelen yıllarca) kullanılabilir. Bu durum güvenlik açısından sonuçlar doğurabilir.
    • Yenileme jetonunu içeren Cassandra'daki satır hiçbir zaman silinmez. Bu durum, verilerin Cassandra'da birikmesine neden olur.
  • Yeni bir erişim jetonu almak için yenileme jetonunu kullanmazsanız ancak bunun yerine yeni bir yenileme jetonu ve erişim jetonu oluşturursanız eski yenileme jetonu Cassandra'da kalır. Sonuç olarak, yenileme jetonları Cassandra'da birikmeye devam eder. Bu durum, şişkinliği, disk kullanımını ve birleştirmeleri daha da artırır ve sonunda Cassandra'da okuma/yazma gecikmelerine neden olur.

En İyi Uygulama

Hem yenileme hem de erişim jetonları için uygun şekilde düşük bir geçerlilik süresi kullanın. Yenileme ve erişim jetonlarının geçerlilik sürelerini ayarlama ile ilgili en iyi uygulamaları inceleyin. Politikada hem erişim hem de yenileme jetonu için bir geçerlilik sonu yapılandırması belirttiğinizden emin olun. Politika yapılandırmasıyla ilgili 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 Özel Bulut için Edge müşterileri için en iyi uygulamalar açıklanmaktadır.

Varsayılan yenileme jetonu geçerlilik süresini belirtme

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

  1. Bir ileti işleme 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 aşağıdaki satırı ekleyin:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
    Bu politika, bir politikada belirtilmemişse varsayılan yenileme jetonu geçerlilik süresini 1 saat olarak ayarlar. Bu varsayılan değeri işletme ihtiyaçlarınıza göre değiştirebilirsiniz.
  3. Mesaj işleyici hizmetini yeniden başlatın:
    apigee-service edge-message-processor restart
  4. Yukarıdaki adımları tüm ileti işlemci düğümlerinde tek tek tekrarlayın.

Cassandra'daki en iyi uygulamalar

Herkese açık olarak sunulan Apigee'nin en son sürümüne yükseltmeyi deneyin. Apigee, Apigee'deki jetonların yönetimini iyileştirmeye ve optimize etmeye devam eden düzeltmeler ve geliştirmeler yayınlamaya devam ediyor. Apigee'de erişim ve yenileme jetonları, "kms" anahtar alanındaki Cassandra'da saklanır. Bu anahtar alanının sıkıştırma stratejisinin LeveledCompactionStrategy olarak ayarlandığından emin olmanız gerekir. Aşağıdaki indekslerin bulunmadığını kontrol etmeniz gerekir:
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx#f0f0f0 ve
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx

Ayrıca, jetonların silinmesi nedeniyle oluşturulan yer işaretlerinin veri deposundan daha hızlı temizlenmesini sağlamak için tablodaki gc_grace_seconds değerini varsayılan 10 günden daha düşük bir değere (ör. 3 gün) indirebilirsiniz. kms.oauth_20_access_tokens

Daha fazla bilgi