Apa tujuan dari "Segarkan Token"?

96

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.

Jason Axelrod
sumber
1
Token akses adalah token pembawa . Artinya tidak diperlukan identifikasi lain, dan hanya token akses yang diperlukan untuk menyamar sebagai Anda. Karena itu, mereka harus selalu berumur pendek. Di sisi lain, token penyegaran bukanlah token pembawa . Saat Anda mengirim token penyegaran ke YouTube untuk mendapatkan token akses baru, Anda juga harus mengirim client_id dan client_secret. Karenanya, token penyegaran dapat bertahan lebih lama karena sangat kecil kemungkinannya token penyegaran dan client_secret akan disusupi.
jrahhali

Jawaban:

90

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 :

  • Token akses dikeluarkan untuk klien pihak ketiga oleh server otorisasi dengan persetujuan dari pemilik sumber daya. Klien menggunakan token akses untuk mengakses sumber daya yang dilindungi yang dihosting oleh server sumber daya.
  • Refresh Token adalah kredensial yang digunakan untuk mendapatkan token akses. Segarkan token diberikan kepada klien oleh server otorisasi dan digunakan untuk mendapatkan token akses baru ketika token akses saat ini menjadi tidak valid atau kedaluwarsa, atau untuk mendapatkan token akses tambahan dengan cakupan yang identik atau lebih sempit.

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:

Ada alasan keamanan, refresh_tokenyaitu hanya pernah ditukar dengan server otorisasi sedangkan access_tokenditukar dengan server sumber daya. Ini mengurangi risiko kebocoran access_token yang berumur panjang di "token akses yang tahan selama satu jam, dengan token penyegaran selama setahun atau baik-sampai-dicabut" vs "token akses yang bagus-sampai-dicabut tanpa penyegaran token."

Untuk informasi yang lebih detail dan lengkap dari Aliran OAuth 2.0, coba lihat referensi berikut:

Teyam
sumber
5
Haruskah token penyegaran juga membantu mendapatkan token penyegaran baru?
Gherman
5
Mengapa tidak memperoleh access_token baru yang berumur pendek saat kedaluwarsa? Mengapa harus memiliki refresh_token yang berumur panjang jika Anda perlu meminta server untuk access_token baru? Atau apakah benar bahwa dengan refresh_token saya tidak perlu mempertahankan cookie penyedia identitas yang hidup dan mengeluarkan access_tokens baru berdasarkan refresh_token bahkan setelah cookie sudah lama hilang dan pengguna harus memasukkan kredensial jika mereka ingin mendapatkan access_token baru?
JustAMartin
2
@JustAMartin Sebagai Klien OAuth2, tanpa token penyegaran, saya perlu memulai seluruh aliran otorisasi lagi (meminta pengguna untuk 'masuk' dan memberi saya izin lagi), untuk mendapatkan token akses lain. Segarkan token melewati persyaratan ini sebagai semacam 'bukti' bahwa saya, sebagai Klien, telah menerima izin Pengguna untuk meminta token akses.
jrahhali
dapatkah sebuah token penyegaran memiliki data yang sama atau sama dengan token akses? karena penggunaan utama token penyegaran adalah untuk memudahkan pengalaman pengguna dan membatasi waktu akses peretas ke sumber daya.
DaviesTobi alex
8

@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_tokenmungkin disimpan hanya di beberapa penyimpanan sementara yang cepat (seperti memori). Hal ini juga memungkinkan otorisasi dan pemisahan server sumber daya.

xmedeko.dll
sumber
3
kecuali ada alasan keamanan, seperti yang disebutkan oleh @Teyam: "refresh_token hanya pernah dipertukarkan dengan server otorisasi sedangkan access_token ditukar dengan server sumber daya"
huyz
Ini hanya lebih aman jika kami menganggap server otorisasi lebih diamankan sebagai server sumber daya. Jika tidak, sebenarnya kurang aman. Jika token penyegaran dikompromikan, saya hanya dapat menggunakannya untuk mendapatkan token akses baru.
Arno van Lieshout
6

"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.

Adam Cole
sumber
6

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.

jrahhali
sumber