Back to IF3110 Pengembangan Aplikasi Berbasis Web

Topic

Questions/Cues

  • Apa itu Otentikasi?

  • Mengapa otentikasi penting di web?

  • Bagaimana alur otentikasi umum?

  • Bagaimana cara menyimpan password dengan aman?

  • Apa itu Hashing & Salting?

  • Apa itu Otentikasi berbasis Database?

  • Apa itu OAuth?

  • Apa itu JWT?

Reference Points

  • Slides 27-50

Apa itu Otentikasi (Authentication)?

Otentikasi adalah proses verifikasi identitas untuk memastikan bahwa seseorang atau sesuatu adalah benar-benar seperti yang mereka klaim. Tujuannya adalah untuk menjawab pertanyaan: “Siapa Anda?“.

Ada tiga cara umum untuk membuktikan identitas:

  1. Sesuatu yang Anda tahu (Contoh: Password, PIN).

  2. Sesuatu yang Anda miliki (Contoh: Token, kunci fisik, smartphone).

  3. Sesuatu yang merupakan bagian dari diri Anda (Contoh: Sidik jari, pemindaian retina).

Di konteks web, otentikasi sangat penting karena sifat HTTP yang stateless, sehingga server perlu cara untuk mengidentifikasi setiap pengguna yang berinteraksi dengannya.

Alur Otentikasi Umum di Web

Proses otentikasi paling umum di aplikasi web, terutama yang berbasis database, mengikuti alur berikut:

  1. Tampilkan Form Login: Pengguna melihat halaman dengan input untuk username dan password.

  2. Kirim Kredensial: Pengguna mengirimkan form. Data dikirim ke server.

  3. Verifikasi di Server: Server memeriksa kredensial yang dikirim dengan data yang tersimpan di database.

  4. Buat Sesi (Session): Jika kredensial valid, server memulai sebuah sesi dan menyimpan penanda identitas pengguna (misalnya, username atau ID) di $_SESSION.

  5. Pemeriksaan Sesi: Pada setiap permintaan berikutnya dari pengguna ke halaman yang dilindungi, server akan memeriksa apakah ada sesi yang valid.

  6. Logout: Saat pengguna keluar, sesi dihancurkan (session_destroy()) untuk menghapus status login.

Keamanan Password: Hashing dan Salting

Aturan Paling Penting: JANGAN PERNAH MENYIMPAN PASSWORD DALAM BENTUK PLAINTEXT (TEKS ASLI)!

Jika database bocor, semua password pengguna akan terekspos. Solusinya adalah menggunakan hashing.

  • Hashing: Adalah proses mengubah string (password) menjadi string lain dengan panjang tetap yang tidak dapat dibalikkan (one-way function). Contoh algoritma: SHA-256.

  • Salting: Sebelum melakukan hashing, sebuah string acak unik (salt) ditambahkan ke password. Ini memastikan bahwa bahkan dua pengguna dengan password yang sama akan memiliki hasil hash yang berbeda di database. Salting sangat efektif melawan serangan rainbow table.

Di PHP, fungsi password_hash() sudah secara otomatis menangani hashing dan salting dengan aman. Untuk memverifikasi, gunakan password_verify().

Otentikasi Berbasis Database: LDAP

Ini adalah metode di mana aplikasi memvalidasi kredensial pengguna terhadap tabel pengguna di databasenya sendiri.

  • Proses Login:

    1. Ambil baris data pengguna dari database berdasarkan username yang dimasukkan.

    2. Gunakan password_verify() untuk membandingkan password yang dikirim dengan hash yang tersimpan di database.

    3. Jika cocok, buat sesi. Jika tidak, tampilkan pesan error.

$ldap = ldap_connect("ldap://ldap.mydomain.com") or die("Could not connect to LDAP server.");
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ldap, LDAP_OPT_REFERRALS, 0);
 
$bind = @ldap_bind($ldap, $ldapuser, $ldappass);
if ($bind) {
	$filter="(sAMAccountName=$username)";
	$result = ldap_search($ldap,"dc=MYDOMAIN,dc=COM",$filter);
	ldap_sort($ldap,$result,"sn");
	$info = ldap_get_entries($ldap, $result);
	if($info['count'] > 0)
		// exists entries

Otentikasi Eksternal: OAuth

OAuth (Open Authorization) adalah sebuah protokol otorisasi yang didelegasikan. Ini memungkinkan aplikasi pihak ketiga (consumer) untuk mendapatkan akses terbatas ke data pengguna di layanan lain (service provider), tanpa aplikasi tersebut perlu mengetahui password pengguna.

Contoh: Fitur “Login with Google”.

  • Aktor dalam OAuth:

    • User: Pemilik data.

    • Resource Consumer (Client): Aplikasi yang ingin mengakses data (misal: Tokopedia).

    • Authorization Server: Server yang mengotentikasi pengguna (misal: Google).

    • Resource Server: Server yang menyimpan data pengguna (misal: Google).

  • Alur Sederhana: Aplikasi Anda mengarahkan pengguna ke Google. Pengguna login di Google dan memberikan izin. Google kemudian memberikan “token” kepada aplikasi Anda yang bisa digunakan untuk mengakses data yang diizinkan.

JSON Web Tokens (JWT)

JWT adalah sebuah standar terbuka untuk membuat token akses yang ringkas dan mandiri (self-contained). Token ini berisi “klaim” (informasi) dalam format JSON yang dapat diverifikasi secara kriptografis.

  • Struktur JWT: Terdiri dari tiga bagian yang dipisahkan oleh titik (.):

    1. Header: Berisi informasi tentang algoritma enkripsi.

    2. Payload: Berisi klaim (data) seperti ID pengguna, peran, dan waktu kedaluwarsa token.

    3. Signature: Tanda tangan digital untuk memverifikasi bahwa token tidak diubah.

  • Penggunaan: JWT sering digunakan dalam API dan aplikasi single-page sebagai pengganti sesi tradisional karena sifatnya yang stateless (tidak perlu disimpan di server).

Summary

Otentikasi adalah proses verifikasi identitas pengguna, yang di web umumnya dilakukan melalui form login yang divalidasi oleh database dan dikelola statusnya menggunakan session. Untuk keamanan, password pengguna wajib disimpan sebagai hash yang di-salt, bukan teks asli, menggunakan fungsi seperti password_hash(). Selain otentikasi internal, protokol seperti OAuth memungkinkan otorisasi yang didelegasikan (seperti “Login with Google”), sementara JWT menyediakan format token yang stateless untuk otentikasi di API dan aplikasi modern.