Dalam pekerjaan sehari-hari mengunakan Apache HTTP Server, tak jarang penulis harus menyediakan basic authentication, dimana user diminta untuk memasukkan username dan password untuk mengakses direktori atau file tertentu. Sebagai contoh, pada bagian D dari tutorial Mengijinkan akses hanya dari IP terdaftar di negara tertentu untuk direktori terproteksi password pada Apache HTTP Server atau bagian B dari Tutorial instalasi phpPgAdmin pada Rocky Linux 8.
Sebagaimana dibahas dalam tutorial-tutorial tersebut, setelah mengkonfigurasi Directory atau Files tertentu agar menggunakan basic authentication, kita perlu menentukan di file apa database user dan password tersimpan. Dan, untuk mengelola file tersebut (misal menambahkan user atau mengubah password), kita dapat menggunakan program htpasswd.
Apabila kebutuhan kita hanya sebatas menyediakan user dengan password tertentu, maka apa yang dicontohkan dalam tutorial-tutorial yang dibahas sebelumnya mungkin sudah cukup. Tapi, bagaimana kalau misalnya, terdapat sebagian user yang merupakan bagian dari dan/atau dikelola oleh aplikasi lain?
Cara yang dapat digunakan adalah dengan selalu menjalankan program htpasswd setiap kali user dari aplikasi lain ditambahkan, atau ketika user mengubah password. Untuk menjalankan program di sistem, bahasa Singkong menyediakan fungsi built-in system.
Cara lain, yang belakangan penulis gunakan, adalah dengan membaca/menulis sendiri file database tersebut, dengan bahasa pemrograman Singkong. Sebagaimana dibahas dalam dokumentasi format password basic authentication Apache, terdapat lima format yang dikenal Apache, yaitu bcrypt, MD5, SHA1, CRYPT, dan plain text. Dalam dokumentasi tersebut, disebutkan juga bahwa SHA1 barangkali yang paling berguna dalam konteks integrasi dengan aplikasi lain.
Ini termasuk aplikasi yang ditulis dengan bahasa Singkong. Kita dapat menggunakan fungsi built-in x_base64_sha1, yang disertakan mulai Singkong versi 10.5. Fungsi ini menerima argumen berupa STRING password (tipe apapun akan diterima, namun akan dikonversi ke STRING), dan mengembalikan encoding Base64 dari hash SHA-1. Sebagai contoh (kode diketikkan di interactive evaluator Singkong):
> x_base64_sha1("testpassword") "i7YRj4/Wk1rQh2o740pxfTJwj/0="
Untuk SHA-1, format password perlu ditambahkan {SHA}, sehingga ketika program dalam bahasa Singkong perlu menulis ke file (dengan fungsi write atau append), kita perlu tuliskan lengkap seperti contoh berikut (apabila username adalah testuser dan password adalah testpassword):
> "testuser" + ":{SHA}" + x_base64_sha1("testpassword") "testuser:{SHA}i7YRj4/Wk1rQh2o740pxfTJwj/0="
Dengan kombinasi fungsi read, split, in, write, dan append tersebut, kita bisa membaca dan menulis sepenuhnya file tersebut, dengan catatan kita hanya memroses yang menggunakan SHA-1.
Terima kasih telah membaca :)