Token penyegaran memiliki setidaknya dua tujuan. Pertama, token penyegaran adalah semacam 'bukti' yang OAuth2 Klien telah sudah mendapat izin dari pengguna untuk mengakses data mereka, dan sehingga dapat meminta akses baru token lagi tanpa mengharuskan pengguna untuk pergi melalui aliran OAuth2 seluruh. Dan kedua, ini membantu meningkatkan keseluruhan aliran keamanan jika dibandingkan dengan token akses berumur panjang. Saya akan membahas kedua poin ini dengan sedikit lebih detail.
Segarkan Token sebagai Cara untuk Tidak Mengganggu Pengguna
Mari kita bicara tentang tujuan pertama dengan sebuah contoh. Misalkan Anda, Pengguna, menggunakan aplikasi web Klien pihak ketiga yang ingin berinteraksi dengan data akun YouTube Anda. Setelah Anda memberikan izin kepada aplikasi Klien untuk menggunakan data YouTube Anda, apakah Anda ingin aplikasi Klien meminta izin Anda lagikapan token YouTube-nya kadaluarsa? Apa yang terjadi jika waktu kadaluwarsa token YouTube adalah sesuatu yang sangat rendah, seperti 5 menit. Akan sedikit mengganggu jika aplikasi Klien meminta izin Anda setidaknya setiap 5 menit! Solusi yang diusulkan OAuth2 untuk 'masalah' ini adalah token penyegaran. Dengan menggunakan token penyegaran, token akses dapat tetap berumur pendek (yang diinginkan jika token akses bocor atau dicuri entah bagaimana), dan token penyegaran dapat tetap bertahan lama (er), memungkinkan Klien untuk mendapatkan akses baru token ketika salah satu kedaluwarsa tanpa memerlukan izin pengguna (lagi).
Tetapi mengapa token penyegaran? Jika intinya adalah jangan mengganggu Pengguna dengan permintaan izin, lalu mengapa Klien tidak bisa hanya mengatakan "Hai, Server Otorisasi, saya ingin token akses lain. Sekarang!"? Atau, "Hai Server Otorisasi, ini token saya yang sudah kadaluwarsa, berikan saya yang baru!". Nah, token penyegaran berfungsi sebagai semacam "bukti" bahwa Klien pada suatu waktu tertentu telah diberikan akses oleh Pengguna. "Bukti" ini dalam bentuk token penyegaran yang ditandatangani secara digital oleh Server Otorisasi. Dengan Klien memberikan token penyegaran, Server Otorisasi dapat memverifikasi bahwa Klien menerima, di beberapa titik di masa lalu, izin dari Pengguna, dan Klien tidak perlu meminta Pengguna lagi.
Segarkan Token sebagai Cara untuk Meningkatkan Keamanan
Namun, ini menimbulkan pertanyaan, "Nah, apa yang terjadi jika token penyegaran bocor atau dicuri, atau disimpan oleh aplikasi Klien jahat yang tidak menyingkirkannya atas permintaan pengguna? Tidak bisakah penyerang melanjutkan menggunakan token penyegaran untuk mendapatkan token akses yang valid tanpa batas waktu (atau hingga kedaluwarsa)? Pertanyaan ini mengarah pada pembahasan tujuan kedua yang saya sebutkan, token penyegaran berkontribusi pada aliran yang lebih aman.
Masalah yang muncul dengan token akses adalah bahwa, setelah diperoleh, mereka hanya akan disajikan ke Server Sumber Daya (YouTube misalnya). Jadi jika token akses dicuri atau disusupi, bagaimana Anda memberi tahu Server Sumber Daya untuk tidak mempercayai token itu? Yah, kamu tidak bisa. Satu-satunya cara untuk melakukannya adalah dengan mengubah kunci penandatanganan pribadi di Server Otorisasi (kunci yang menandatangani token sejak awal). Saya membayangkan ini tidak nyaman untuk dilakukan, dan dalam beberapa kasus (seperti Auth0), tidak didukung.
Di sisi lain, token penyegaran harus sering disajikan ke Server Otorisasi, jadi jika ada yang disusupi, maka mudah untuk mencabut atau menolak token penyegaran secara keseluruhan, dan tidak perlu mengubah kunci penandatanganan apa pun.