Bagaimana cara kerja otentikasi berbasis cookie?

210

Dapatkah seseorang memberi saya deskripsi langkah demi langkah tentang cara kerja otentikasi berbasis cookie? Saya tidak pernah melakukan sesuatu yang melibatkan otentikasi atau cookie. Apa yang perlu dilakukan browser? Apa yang perlu dilakukan server? Dalam urutan apa? Bagaimana kita menjaga keamanan?

Saya telah membaca tentang berbagai jenis otentikasi dan tentang cookie tetapi saya ingin deskripsi dasar tentang bagaimana menggunakan keduanya bersama-sama - Saya hanya membaca bahwa mereka sering digunakan bersama tetapi tidak dapat menemukan deskripsi bagaimana.

Mastid
sumber

Jawaban:

162

Cookie pada dasarnya hanyalah sebuah item dalam kamus. Setiap item memiliki kunci dan nilai. Untuk otentikasi, kuncinya bisa berupa 'nama pengguna' dan nilainya akan menjadi nama pengguna. Setiap kali Anda membuat permintaan ke situs web, browser Anda akan memasukkan cookie dalam permintaan, dan server host akan memeriksa cookie. Jadi otentikasi dapat dilakukan secara otomatis seperti itu.

Untuk mengatur cookie, Anda hanya perlu menambahkannya ke respons yang dikirim server setelah permintaan. Browser kemudian akan menambahkan cookie setelah menerima respons.

Ada beberapa opsi yang dapat Anda konfigurasi untuk sisi server cookie, seperti waktu kedaluwarsa atau enkripsi. Cookie terenkripsi sering disebut sebagai cookie yang ditandatangani. Pada dasarnya server mengenkripsi kunci dan nilai dalam item kamus, sehingga hanya server yang dapat menggunakan informasi tersebut. Jadi cookie akan aman.

Browser akan menyimpan cookie yang ditetapkan oleh server. Di header HTTP setiap permintaan yang dibuat browser ke server itu, itu akan menambahkan cookie. Itu hanya akan menambahkan cookie untuk domain yang mengaturnya. Example.com dapat mengatur cookie dan juga menambahkan opsi di header HTTP untuk browser untuk mengirim cookie kembali ke subdomain, seperti sub.example.com. Peramban tidak akan dapat diterima untuk pernah mengirim cookie ke domain lain.

Conor Patrick
sumber
Apa yang saya pahami adalah browser dapat mengirim cookie kembali ke domain yang sama. Sehubungan dengan itu apakah browser mengambil subdomain dalam akun saat membedakan antara dua domain?
Aakash
1
Anda dapat mengatur opsi di header HTTP untuk cara browser menangani subdomain.
Conor Patrick
288

Saya menyadari ini terlambat beberapa tahun, tetapi saya pikir saya dapat memperluas jawaban Conor dan menambahkan sedikit lebih banyak ke dalam diskusi.

Dapatkah seseorang memberi saya deskripsi langkah demi langkah tentang cara kerja otentikasi berbasis cookie? Saya tidak pernah melakukan sesuatu yang melibatkan otentikasi atau cookie. Apa yang perlu dilakukan browser? Apa yang perlu dilakukan server? Dalam urutan apa? Bagaimana kita menjaga keamanan?

Langkah 1: Klien> Mendaftar

Sebelum hal lain, pengguna harus mendaftar. Klien memposting permintaan HTTP ke server yang berisi nama pengguna dan kata sandinya.

Langkah 2: Server> Menangani pendaftaran

Server menerima permintaan ini dan memotong kata sandi sebelum menyimpan nama pengguna dan kata sandi di basis data Anda. Dengan cara ini, jika seseorang mendapatkan akses ke database Anda, mereka tidak akan melihat kata sandi aktual pengguna Anda.

Langkah 3: Klien> Login pengguna

Sekarang pengguna Anda masuk. Ia memberikan nama pengguna / kata sandi dan sekali lagi, ini diposting sebagai permintaan HTTP ke server.

Langkah 4: Server> Memvalidasi login

Server mencari nama pengguna dalam database, memilah-milah kata sandi login yang disediakan, dan membandingkannya dengan kata sandi yang sebelumnya di-hash dalam database. Jika tidak memeriksa, kami dapat menolak akses mereka dengan mengirimkan kode status 401 dan mengakhiri permintaan .

Langkah 5: Server> Membuat token akses

Jika semuanya memeriksa, kita akan membuat token akses, yang secara unik mengidentifikasi sesi pengguna. Masih di server, kami melakukan dua hal dengan token akses:

  1. Simpan di database yang terkait dengan pengguna itu
  2. Tempelkan ke cookie respons untuk dikembalikan ke klien. Pastikan untuk menetapkan tanggal kedaluwarsa / waktu untuk membatasi sesi pengguna

Untuk selanjutnya, cookie akan dilampirkan ke setiap permintaan (dan tanggapan) yang dibuat antara klien dan server.

Langkah 6: Klien> Membuat permintaan halaman

Kembali ke sisi klien, kami sekarang login. Setiap kali klien membuat permintaan untuk halaman yang memerlukan otorisasi (yaitu mereka harus login), server mendapatkan token akses dari cookie dan mengeceknya terhadap yang dalam database yang terkait dengan pengguna itu. Jika check out, akses diberikan.

Ini seharusnya membuatmu memulai. Pastikan untuk menghapus cookie saat keluar!

pllx
sumber
10
Terima kasih untuk deskripsinya. Saya hanya ingin tahu bagaimana token akses menyediakan keamanan? Bisakah penyerang mencuri cookie, menyamar sebagai pengguna login yang terotentikasi? Atau itu dilindungi oleh SSL?
Richeek
6
@Richeek SSL mengamankan intersepsi selama permintaan / tanggapan, tetapi penyerang mungkin mengakses cookie Anda di titik akhir (misalnya browser Anda). Secara teoritis, mereka kemudian dapat berpose sebagai pengguna yang masuk hingga cookie berakhir. Saya katakan "secara teoritis" karena implementasi di atas tidak mengatasinya. Dalam implementasi di atas, penyerang akan memiliki akses sampai token akses di database Anda diperbarui (yaitu login berikutnya).
pllx
14
Anda mungkin membatalkan token akses saat kedaluwarsa sendiri, mungkin dengan "tanggal kedaluwarsa" di database Anda. Atau, Anda dapat mempertimbangkan menggunakan JSON Web Tokens (JWT) , yang seperti token akses, tetapi dapat menangani token yang kedaluwarsa antara lain. Lebih lanjut tentang JWT di sini. Penyerang masih akan memiliki akses ke akun Anda untuk periode waktu singkat jika mereka memiliki token / JWT Anda, jadi Anda juga harus mengamankan titik akhir Anda.
pllx
3
Butuh waktu lama bagi saya untuk mengucapkan terima kasih! Terima kasih atas penjelasan Anda
Richeek
4
@ManuChadha Anda bisa bersama dengan token / kunci sesi juga menyimpan alamat ip pengguna bersama dengan parameter pengidentifikasi lainnya seperti agen-pengguna, dll. Jika permintaan kemudian datang dengan cookie yang valid tetapi dari ip yang salah, browser, dll maka Anda tolak permintaan dan arahkan pengguna ke halaman login untuk mengautentikasi lagi.
FalcoGer
18

Otentikasi Berbasis Cookie

Otentikasi berbasis cookie bekerja secara normal dalam 4 langkah ini-

  1. Pengguna memberikan nama pengguna dan kata sandi dalam formulir login dan mengklik Log In.
  2. Setelah permintaan dibuat, server memvalidasi pengguna di backend dengan menanyakan dalam database. Jika permintaan itu valid, itu akan membuat sesi dengan menggunakan informasi pengguna yang diambil dari database dan menyimpannya, untuk setiap sesi id unik yang disebut sesi ID dibuat, secara default sesi ID akan diberikan kepada klien melalui Browser.
  3. Browser akan mengirimkan ID sesi ini pada setiap permintaan berikutnya, ID sesi diverifikasi terhadap database, berdasarkan situs web sesi id ini akan mengidentifikasi sesi milik klien mana dan kemudian memberikan akses permintaan.

  4. Setelah pengguna keluar dari aplikasi, sesi dihancurkan baik sisi klien maupun sisi server.

Debendra Dash
sumber