Beberapa skenario mungkin membantu menggambarkan tujuan akses dan menyegarkan token dan pertukaran teknik dalam merancang sistem Oauth2 (atau auth lain):
Skenario aplikasi web
Dalam skenario aplikasi web, Anda memiliki beberapa opsi:
- jika Anda memiliki manajemen sesi Anda sendiri, simpan access_token dan refresh_token terhadap id sesi Anda dalam status sesi pada layanan status sesi Anda. Ketika sebuah halaman diminta oleh pengguna yang mengharuskan Anda untuk mengakses sumber daya gunakan access_token dan jika access_token telah kedaluwarsa gunakan refresh_token untuk mendapatkan yang baru.
Bayangkan seseorang berhasil membajak sesi Anda. Satu-satunya hal yang mungkin adalah meminta halaman Anda.
- jika Anda tidak memiliki manajemen sesi, letakkan access_token dalam cookie dan gunakan itu sebagai sesi. Lalu, setiap kali pengguna meminta halaman dari server web Anda kirimkan access_token. Server aplikasi Anda dapat menyegarkan access_token jika perlu.
Membandingkan 1 dan 2:
Dalam 1, access_token dan refresh_token hanya melakukan perjalanan melalui kabel di jalan antara server otorisasi (google dalam kasus Anda) dan server aplikasi Anda. Ini akan dilakukan pada saluran yang aman. Seorang peretas dapat membajak sesi tersebut tetapi mereka hanya dapat berinteraksi dengan aplikasi web Anda. Di 2, peretas dapat mengambil akses_token dan membentuk permintaan mereka sendiri ke sumber daya yang telah diberikan akses kepada pengguna. Bahkan jika peretas menguasai access_token, mereka hanya akan memiliki jendela pendek di mana mereka dapat mengakses sumber daya.
Apapun itu, refresh_token dan clientid / secret hanya diketahui oleh server sehingga tidak mungkin dari browser web untuk mendapatkan akses jangka panjang.
Bayangkan Anda menerapkan oauth2 dan menetapkan batas waktu yang lama pada token akses:
Dalam 1) Tidak ada banyak perbedaan di sini antara token akses pendek dan panjang karena disembunyikan di server aplikasi. Dalam 2) seseorang bisa mendapatkan access_token di browser dan kemudian menggunakannya untuk secara langsung mengakses sumber daya pengguna untuk waktu yang lama.
Skenario seluler
Di ponsel, ada beberapa skenario yang saya ketahui:
Simpan clientid / rahasia di perangkat dan minta perangkat mengatur akses ke sumber daya pengguna.
Gunakan server aplikasi backend untuk menyimpan clientid / rahasia dan minta orkestrasi melakukannya. Gunakan access_token sebagai semacam kunci sesi dan berikan di antara klien dan server aplikasi.
Membandingkan 1 dan 2
In 1) Setelah Anda memiliki clientid / rahasia di perangkat mereka tidak lagi rahasia. Siapa pun dapat mendekompilasi dan kemudian mulai bertindak seolah-olah mereka adalah Anda, dengan izin dari pengguna tentu saja. Access_token dan refresh_token juga ada dalam memori dan dapat diakses pada perangkat yang dikompromikan yang berarti seseorang dapat bertindak sebagai aplikasi Anda tanpa pengguna memberikan kredensial mereka. Dalam skenario ini, panjang access_token tidak membuat perbedaan pada kemampuan meretas karena refresh_token berada di tempat yang sama dengan access_token. Dalam 2) clientid / rahasia atau token penyegaran dikompromikan. Di sini, lamanya kedaluwarsa access_token menentukan berapa lama seorang hacker dapat mengakses sumber daya pengguna, jika mereka mendapatkannya.
Panjang kedaluwarsa
Di sini tergantung pada apa yang Anda amankan dengan sistem auth Anda untuk berapa lama seharusnya kadaluwarsa access_token Anda. Jika itu sesuatu yang sangat berharga bagi pengguna itu harus pendek. Sesuatu yang kurang berharga, bisa lebih lama.
Beberapa orang seperti Google tidak kedaluwarsa pada refresh_token. Beberapa seperti stackflow lakukan. Keputusan tentang kedaluwarsa merupakan trade-off antara kemudahan dan keamanan pengguna. Panjang token penyegaran terkait dengan panjang pengembalian pengguna, yaitu mengatur penyegaran seberapa sering pengguna kembali ke aplikasi Anda. Jika token penyegaran tidak kedaluwarsa, satu-satunya cara mereka dicabut adalah dengan pencabutan eksplisit. Biasanya, masuk tidak mencabut.
Semoga postingan yang agak panjang bermanfaat.