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 : 

  1. Menyatukan password dan salt, dengan format $password.'{'.$salt.'}'
  2. Di hash dengan algoritma sh512, kemudian diiterasi sebanyak 5000 kali
  3. 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

  1. NPProfile, https://github.com/OpenThink-Labs/NPProfile
  2. How to change the way Symfony2 encodes passwords, http://www.ens.ro/2012/07/25/how-to-change-the-way-symfony2-encodes-passwords/
  3. MessageDigestPasswordEncoder.php, https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Security/Core/Encoder/MessageDigestPasswordEncoder.php

Comments