Antipattern: Menetapkan waktu habis masa berlaku untuk token OAuth

Anda sedang melihat dokumentasi Apigee Edge.
Buka dokumentasi Apigee X.
info

Apigee Edge menyediakan framework OAuth 2.0 untuk mengamankan API. OAuth2 adalah salah satu skema otorisasi dan autentikasi berbasis token standar terbuka yang paling populer. Dengan API ini, aplikasi klien dapat mengakses API atas nama pengguna tanpa mengharuskan pengguna memberitahukan nama pengguna dan sandi mereka.

Apigee Edge memungkinkan developer membuat akses dan/atau token refresh dengan menerapkan salah satu dari empat jenis pemberian OAuth2 - kredensial klien, sandi, implisit, dan kode otorisasi - menggunakan kebijakan OAuthv2. Aplikasi klien menggunakan token akses untuk memakai API yang aman. Setiap token akses memiliki waktu habis masa berlakunya sendiri, yang dapat ditetapkan dalam kebijakan OAuthv2.

Token refresh dikeluarkan secara opsional bersama dengan token akses dengan beberapa jenis pemberian. Token refresh digunakan untuk mendapatkan token akses baru yang valid setelah token akses asli berakhir masa berlakunya atau dicabut. Waktu habis masa berlaku untuk token refresh juga dapat ditetapkan dalam kebijakan OAuthv2.

Antipola ini berkaitan dengan antipola menetapkan waktu habis masa berlaku yang lama untuk token OAuth.

Antipola

Jika tidak menetapkan waktu habis masa berlaku untuk token refresh dalam kebijakan OAuthv2, akumulasi token OAuth dan peningkatan penggunaan ruang disk pada node Cassandra akan terakumulasi.

Contoh kebijakan OAuthV2 berikut menunjukkan konfigurasi yang tidak ada untuk <RefreshTokenExpiresIn>:

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

Pada contoh di atas:

  • Token akses ditetapkan dengan waktu habis masa berlaku yang cukup rendah, yaitu 30 menit.
  • Akhir masa berlaku token refresh belum ditetapkan.
  • Token refresh tetap ada di penyimpanan data (Cassandra) selamanya, sehingga menyebabkan akumulasi data.
  • Token refresh yang dibuat tanpa masa berlaku dapat digunakan tanpa batas waktu untuk membuat token akses.
  • Jika traffic ke API ini adalah 10 permintaan per detik, maka API tersebut dapat menghasilkan sebanyak 864.000 token dalam sehari.

Dampak

  • Jika token refresh dibuat tanpa masa berlakunya, ada dua konsekuensi utama:
    • Token refresh dapat digunakan kapan saja di masa mendatang, mungkin selama bertahun-tahun, untuk mendapatkan token akses. Hal ini dapat memiliki implikasi keamanan.
    • Baris di Cassandra yang berisi token refresh tidak akan pernah dihapus. Hal ini akan menyebabkan data terakumulasi di Cassandra.
  • Jika Anda tidak menggunakan token refresh untuk mendapatkan token akses baru, tetapi membuat token refresh dan token akses baru, token refresh yang lebih lama akan tetap berada di Cassandra. Akibatnya, token refresh akan terus terakumulasi di Cassandra, yang makin membesar, meningkatkan penggunaan disk, dan pemadatan yang lebih berat, dan pada akhirnya akan menyebabkan latensi baca/tulis di Cassandra.

Praktik Terbaik

Gunakan waktu habis masa berlaku yang rendah untuk token refresh dan akses. Lihat praktik terbaik untuk menetapkan waktu habis masa berlaku token akses dan refresh. Pastikan untuk menentukan konfigurasi masa berlaku akses dan token refresh dalam kebijakan. Baca dokumentasi kebijakan OauthV2 untuk mengetahui detail selengkapnya tentang konfigurasi kebijakan.

Praktik terbaik khususnya bagi pelanggan Edge untuk Private Cloud

Bagian ini menjelaskan praktik terbaik khususnya untuk pelanggan Edge untuk Private Cloud.

Menentukan masa berlaku token refresh default

Secara default, jika akhir masa berlaku token refresh tidak ditentukan dalam konfigurasi kebijakan, Edge akan membuat token refresh tanpa masa berlaku. Anda dapat mengganti perilaku ini dengan prosedur berikut:

  1. Pada node pemroses pesan, edit atau buat file penggantian konfigurasi $APIGEE_ROOT/customer/application/message-processor.properties. Pastikan file ini dapat dibaca oleh pengguna apigee.
  2. Tambahkan baris berikut ke file:
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
    Tindakan ini akan menetapkan akhir masa berlaku token refresh default, jika tidak ada yang ditentukan dalam kebijakan, menjadi 1 jam. Anda dapat mengubah nilai default ini berdasarkan kebutuhan bisnis Anda.
  3. Mulai ulang layanan Pemroses pesan:
    apigee-service edge-message-processor restart
  4. Ulangi langkah-langkah di atas di semua node pemroses pesan satu per satu.

Praktik terbaik di Cassandra

Coba upgrade ke Apigee versi terbaru yang tersedia untuk publik. Apigee terus merilis perbaikan dan peningkatan yang terus meningkatkan dan mengoptimalkan pengelolaan token dalam Apigee. Di Apigee, token akses dan refresh disimpan di Cassandra dalam keyspace “km”. Anda harus memastikan strategi pemadatan ruang kunci ini disetel ke LeveledCompactionStrategy. Anda harus memeriksa bahwa indeks berikut tidak ada:
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_organization_name_idx#f0f0f0 dan
  • kms.oauth_20_access_tokens.oauth_20_access_tokens_status_idx

Anda juga dapat mengurangi gc_grace_seconds pada tabel kms.oauth_20_access_tokens dari default 10 hari menjadi nilai yang lebih rendah (misalnya 3 hari) untuk memastikan tombstone yang dihasilkan karena token yang dihapus dihapus dari penyimpanan data dengan lebih cepat.

Bacaan lebih lanjut