Saya memiliki program yang terintegrasi dengan YouTube Live Streaming API. Ini berjalan pada pengatur waktu, jadi relatif mudah bagi saya untuk memprogram untuk mengambil Token Akses baru setiap 50 menit dengan Token Refresh. Pertanyaan saya adalah, mengapa?
Saat saya mengautentikasi dengan YouTube, saya mendapat Refresh Token. Saya kemudian menggunakan token penyegaran ini untuk mendapatkan Token Akses baru sekitar satu kali dalam satu jam. Jika saya memiliki Refresh Token, saya SELALU dapat menggunakan ini untuk mendapatkan Access Token baru, karena tidak pernah kedaluwarsa. Jadi saya tidak melihat bagaimana ini lebih aman daripada hanya memberi saya Access Token dari awal dan tidak mengganggu seluruh sistem Refresh Token.
authentication
oauth
youtube-api
access-token
refresh-token
Jason Axelrod
sumber
sumber
Jawaban:
Pada dasarnya, token penyegaran digunakan untuk mendapatkan token akses baru.
Untuk membedakan kedua token ini dengan jelas dan menghindari tercampur, berikut fungsinya yang diberikan dalam Kerangka Kerja Otorisasi OAuth 2.0 :
Sekarang, untuk menjawab pertanyaan Anda tentang mengapa Anda masih diberikan token penyegaran alih-alih hanya mengamankan token akses, alasan utama yang diberikan oleh Internet Engineering Task Force dalam token Refresh adalah:
Untuk informasi yang lebih detail dan lengkap dari Aliran OAuth 2.0, coba lihat referensi berikut:
sumber
@Teyam menyebutkan pos SO Mengapa OAuth v2 Memiliki Akses dan Segarkan Token? tetapi saya lebih suka jawaban lain di sana: https://stackoverflow.com/a/12885823/254109
TL; DR
refresh_token
tidak meningkatkan keamanan. Ini bertujuan untuk meningkatkan skalabilitas dan kinerja. Kemudian,access_token
mungkin disimpan hanya di beberapa penyimpanan sementara yang cepat (seperti memori). Hal ini juga memungkinkan otorisasi dan pemisahan server sumber daya.sumber
"Jadi saya tidak melihat bagaimana ini lebih aman daripada hanya memberi saya Access Token dari awal dan tidak mengganggu seluruh sistem Refresh Token." Saya berjuang dengan pertanyaan yang sama. Jawaban singkatnya adalah token penyegaran diperlukan untuk memastikan kredensial belum kedaluwarsa.
Sebuah contoh mungkin membantu: Saya memiliki database yang menyimpan rekam medis Anda. Anda setuju untuk membagikan catatan medis Anda dengan pasangan Anda. Pasangan Anda menggunakan Token Akses mereka untuk membaca catatan Anda dari database saya. Dua minggu dari sekarang pasangan Anda memeriksa kembali catatan medis Anda dan token penyegaran digunakan untuk memastikan mereka masih memiliki izin (dari server otentikasi) untuk melihat catatan Anda. Token penyegaran melewati kebutuhan pasangan Anda untuk memasukkan kembali kredensial mereka (nama pengguna dan kata sandi) ke server otentikasi, tetapi itu memastikan mereka masih memiliki legitimasi untuk mengakses sumber daya. Access Token yang tidak pernah kedaluwarsa tidak akan tahu apakah Anda telah mencabut hak pasangan Anda untuk mengakses rekam medis Anda.
sumber
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.
sumber