sqlauth:SQL
Untuk contoh sumber autentifikasi yang menggunakan modul sqlauth:SQL, kita menggunakan skema database yang digunakan oleh FOSUserBundle pada symfony2 framework, sebuah aplikasi sederhana telah dibuat, NPProfile [1]
Yang sangat perlu kita ketahui adalah, bagaimana FOSUserBundle mengenkripsi password yang tersimpan dalam database ?
Setelah membaca [2] dan [3] , secara default mekanisme penyimpanan password pasa FOSUserBundle adalah sebagai berikut :
Menyatukan password dan salt, dengan format $password.'{'.$salt.'}'
Di hash dengan algoritma sh512, kemudian diiterasi sebanyak 5000 kali
Encode dengan base64_code
Kalau ketiga langkah tersebut dilakukan, maka passwordnya akan didapat.
Tinggal tambahkan fungsi berikut di modules/sqlauth/lib/Auth/Source/SQL.php
protected function symfony2PasswordEncoder($salt,$password) {
$salted = $password.'{'.$salt.'}' ;
$digest = hash('sha512',$salted,true) ;
for($i=1;$i<5000;$i++) {
$digest = hash("sha512", $digest.$salted, true);
}
$result = base64_encode($digest) ;
return $result ;
}
Kemudian gunakan fungsi ini pada bagian fungsi login().
Selesai.
Catatan : Ada baiknya membuat module sumber autentifikasi yang baru agar module sqlauth:SQL dapat digunakan seperti biasanya.
Referensi
NPProfile, https://github.com/OpenThink-Labs/NPProfile
How to change the way Symfony2 encodes passwords, http://www.ens.ro/2012/07/25/how-to-change-the-way-symfony2-encodes-passwords/
MessageDigestPasswordEncoder.php, https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Core/Encoder/MessageDigestPasswordEncoder.php