Generator Header Basic Auth

Masukkan nama pengguna dan kata sandi untuk mendapatkan header Authorization: Basic beserta perintah curl yang siap dijalankan, atau tempel header yang sudah ada untuk melihat kredensial di dalamnya.

Header Authorization
Perintah curl

Dekode header yang sudah ada

Berjalan sepenuhnya di browser Anda. Tidak ada yang diunggah.

Cara menggunakan

  1. Masukkan nama pengguna dan kata sandi.
  2. Salin Header Authorization yang dihasilkan ke klien Anda, atau gunakan Perintah curl untuk menguji permintaan.
  3. Untuk membaca header yang ada, tempel di bagian Dekode header yang sudah ada; nama pengguna dan kata sandinya akan langsung ditampilkan.

Cara kerja autentikasi HTTP Basic

Autentikasi Basic didefinisikan dalam RFC 7617. Saat sebuah sumber daya dilindungi, server membalas dengan 401 Unauthorized dan header WWW-Authenticate: Basic realm="...". Klien kemudian menggabungkan nama pengguna dan kata sandi dengan titik dua, mengenkode hasilnya sebagai Base64, lalu mengirimkannya bersama setiap permintaan:

Authorization: Basic base64(username ":" password)

# Contoh dari RFC 7617: pengguna "Aladdin", kata sandi "open sesame"
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Browser menangani pertukaran ini sendiri dan menampilkan dialog login, sedangkan skrip dan klien API biasanya langsung mengirim header pada permintaan pertama tanpa menunggu tantangan dari server. Karena titik dua memisahkan kedua nilai, nama pengguna tidak boleh mengandung titik dua, sedangkan kata sandi boleh. Server dapat menambahkan charset="UTF-8" pada tantangannya untuk memberi tahu bahwa kredensial non-ASCII diharapkan dalam UTF-8.

Base64 bukan enkripsi

Header ini tampak acak, tetapi siapa pun yang melihatnya dapat memulihkan kata sandi dalam hitungan detik, baik dengan decoder di halaman ini maupun dengan decoder Base64 mana pun. Autentikasi Basic hanya layak digunakan melalui HTTPS, karena TLS mengenkripsi header selama transit. Perlu diingat juga bahwa:

  • kredensial ikut terkirim pada setiap permintaan, sehingga satu permintaan HTTP biasa saja sudah cukup untuk membocorkannya;
  • proxy, load balancer, dan alat debugging mungkin mencatat header Authorization ke log kecuali dikonfigurasi untuk tidak melakukannya;
  • browser mengingat kredensial yang dimasukkan sampai browser ditutup, dan tidak ada cara standar untuk logout.

Untuk API publik, token API yang dapat dicabut atau OAuth lebih cocok. Autentikasi Basic tetap menjadi pilihan yang wajar untuk alat internal, situs staging, dan komunikasi antarserver melalui TLS.

Mengirim header dari kode

# curl membuat header sendiri
curl -u 'user:password' https://api.example.com/

// JavaScript fetch (btoa hanya menangani karakter Latin-1)
fetch(url, { headers: { Authorization: 'Basic ' + btoa('user:password') } })

# Python requests
requests.get(url, auth=('user', 'password'))

Hindari menyisipkan kredensial di URL, seperti pada https://user:password@host/. RFC 3986 sudah tidak menganjurkan bentuk itu, URL semacam ini tersimpan di riwayat browser dan log server, dan browser modern membatasinya.

Pertanyaan yang sering diajukan

Bagaimana cara mendekode header Basic auth?

Tempel header di bagian Dekode header yang sudah ada, dan nama pengguna serta kata sandinya langsung muncul. Decoder Base64 mana pun memberikan hasil yang sama, dan justru karena itulah header ini hanya boleh dikirim melalui HTTPS.

Bolehkah kata sandi mengandung titik dua?

Boleh. Server memisahkan nilai hasil dekode pada titik dua pertama, sehingga semua yang ada setelahnya termasuk kata sandi. Namun, nama pengguna tidak boleh mengandung titik dua.

Apakah autentikasi HTTP Basic aman?

Melalui HTTPS dengan kata sandi yang kuat dan unik, kredensial terlindungi selama transit, tetapi kredensial tersebut dikirim pada setiap permintaan dan tidak bisa kedaluwarsa seperti token. Jangan pernah menggunakannya melalui HTTP biasa.

Mengapa login gagal untuk kata sandi yang berisi huruf beraksen atau karakter non-Latin?
Klien dan server mungkin memakai pengodean karakter yang berbeda. RFC 7617 memungkinkan server menyatakan charset="UTF-8"; tanpa itu, server lama mungkin menganggap ISO-8859-1 dan membandingkan byte yang berbeda.
Apakah kata sandi saya dikirim ke suatu tempat?

Tidak. Header dibuat oleh JavaScript di browser Anda dan tidak ada yang dikirim. Meski begitu, gunakan kredensial uji saat Anda membagikan perintah curl yang dihasilkan kepada orang lain.