Saya secara khusus tertarik pada bagaimana pengguna melakukan operasi yang diautentikasi / diautentikasi pada API web.
Apakah cookie autentikasi kompatibel dengan filosofi REST, dan mengapa?
web-applications
web-services
rest
Brandon Linton
sumber
sumber
Jawaban:
Layanan RESTful yang ideal memungkinkan klien (yang mungkin bukan di browser) untuk melakukan tugas yang diperlukan dalam satu permintaan ; karena keadaan penuh yang diperlukan untuk melakukan itu dipegang oleh klien, bukan server. Karena klien memiliki kontrol penuh atas negara, ia dapat membuat negara sendiri (jika itu sah), dan hanya berbicara dengan API untuk "menyelesaikannya".
Membutuhkan cookie dapat membuat hal itu sulit. Untuk klien selain browser, mengelola cookie adalah ketidaknyamanan yang cukup besar dibandingkan dengan permintaan kueri, header permintaan biasa atau badan permintaan. Di sisi lain, Di browser, menggunakan cookie dapat membuat banyak hal menjadi lebih sederhana.
Jadi API mungkin pertama-tama mencari di
Authorization
header untuk data otentikasi yang diperlukan, karena itu mungkin tempat di mana klien non-browser akan lebih suka untuk meletakkannya, tetapi untuk menyederhanakan dan merampingkan klien berbasis browser, mungkin juga memeriksa cookie sesi untuk sisi server masuk, tetapi hanya jikaAuthorization
header biasa tidak ada.Contoh lain mungkin permintaan kompleks yang biasanya membutuhkan banyak parameter yang ditetapkan. Klien non-interaktif tidak akan kesulitan mengacak semua data itu menjadi satu permintaan, tetapi antarmuka berbasis formulir HTML mungkin lebih suka memecah permintaan menjadi beberapa halaman (sesuatu seperti set halaman 'penyihir') sehingga pengguna tidak disajikan dengan opsi yang tidak berlaku berdasarkan pilihan sebelumnya. Semua halaman perantara dapat menyimpan nilai dalam cookie sisi klien, sehingga hanya halaman terakhir, di mana pengguna benar-benar mengirimkan permintaan, memiliki efek samping server sama sekali. API dapat mencari atribut yang diperlukan di badan permintaan, dan kembali ke melihat cookie jika parameter yang dibutuhkan tidak ada.
Edit: di RE ke komentar @ Konrad di bawah ini:
er ... Anda memvalidasi cookie di sisi server, bukan? Hanya karena Anda memberi tahu browser untuk membuang cookie setelah 24 jam, bukan berarti cookie akan dihapus. Cookie itu dapat disimpan oleh pengguna yang sangat teknis dan digunakan kembali lama setelah "kedaluwarsa".
Jika Anda tidak ingin menyimpan data sesi di sisi server, Anda harus menyimpannya di token (cookie atau lainnya). Token autentik berisi diri sendiri kadang-kadang disebut Macaroon. Bagaimana ini dilewatkan antara klien dan server (apakah dengan cookie, sebagai header tambahan, atau dalam entitas permintaan itu sendiri) benar-benar independen dari mekanisme otentikasi itu sendiri.
sumber
HttpClient
.NET Anda dapat menggunakan cookie tanpa masalah dan Anda tidak perlu memikirkannya. Token dalam perbandingan lebih sulit diterapkan terutama karena Anda tidak dapat dengan mudah membatalkan token tanpa menyimpannya di suatu tempat.curl
atauwget
, mengelola cookie sangat merepotkan dan Anda benar-benar harus memikirkannya banyak. Saya membalas poin Anda yang lain dengan mengedit jawaban saya.Ya dan Tidak - Tergantung cara Anda menggunakannya.
Cookie jika digunakan untuk mempertahankan keadaan klien di klien, untuk klien, klien dan klien maka mereka tenang.
Jika Anda menyimpan status server ke cookie, maka pada dasarnya Anda hanya memindahkan beban ke klien - yang tidak tenang.
Jadi apa saja contohnya?
Tenang:
Tidak Tenang:
Ketenangan berasal dari kewarganegaraan - dari server. Klien dapat mempertahankan status aplikasi dan mengirimkannya ke server untuk mengatakan di mana mereka berada sehingga server dapat memutuskan ke mana harus pergi dari sana. Pada dasarnya sesi / negara bagian membutuhkan data historis dan bergantung pada permintaan sebelumnya sehingga untuk berbicara, aplikasi yang tenang idealnya tidak (Ini tidak layak untuk memiliki aplikasi 100% murni yang tenang jika Anda akan memiliki layar login :)
sumber
Seseorang dapat menggunakan cookie. REST memungkinkan mereka.
REST mensyaratkan bahwa setiap informasi sesi disimpan di sisi klien, tetapi ketika datang ke otentikasi, beberapa informasi harus tetap di sisi server untuk alasan keamanan.
Dari salah satu posting blog saya , ada kesepakatan umum bahwa data otentikasi dianggap di luar ruang lingkup mengenai REST. Oleh karena itu, tidak masalah bagi server untuk menyimpan sebagian data sesi ini di pihak mereka.
sumber