Pada catatan sebelumnya kita sudah belajar belajar bagaimana cara membuat API server menggunakan Laravel Passport dan sudah berhasil melakukan login. Tapi masalahnya pada metode login yang kita buat sebelumnya, client_secret kita masih kelihatan, dan ini tentunya tidak bagus untuk keamanan server kita.
Apabila client_secret key ini bisa di lihat dengan mudah, maka orang akan mudah untuk melakukan akses data pada server kita. Untuk itu kita harus melakukan modifikasi pada server, sehingga user tidak perlu memasukan client_secret pada saat login.
Caranya adalah, kita akan memanggil route yang memerlukan client_secret ini di dalam server, jadi proses login yang sesungguhnya akan terjadi di dalam server, sehingga tidak terlihat oleh pengguna. Pada proses ini akan menggunakan modul Guzzle http.
Jalankan perintah composer require guzzlehttp/guzzle. lalu tunggu sampai proses download selesai.
Kita membuat code di atas, karena kita tidak akan menaruh url login, client_secret dan id di dalam function Login, melainkan di dalam file .ENV. hal ini akan memudahkan kita apabila ada perubahan parameter di atar kedepannya.
Demikianlah cara untuk menyembunyikan client_secret pada proses login ke API server. Sampai di sini kita sudah belajar semua tahap dasar dalam membuat API Server menggunakan Laravel. Untuk proses selanjutnya silahkan kembangkan sesuai keperluan.
Ilustrasi Proses Login yang tidak aman. |
Caranya adalah, kita akan memanggil route yang memerlukan client_secret ini di dalam server, jadi proses login yang sesungguhnya akan terjadi di dalam server, sehingga tidak terlihat oleh pengguna. Pada proses ini akan menggunakan modul Guzzle http.
BACA JUGA
Menyembunyikan Secret Key pada Laravel Passport
Berikut ini adalah langkah-langkah yang harus kita lakukan untuk menyembunyikan client_secret key pada proses login:1. Install Guzzle
pertama kita harus menambahkan modul Guzzle ke dalam project, caranya: buka Terminal danJalankan perintah composer require guzzlehttp/guzzle. lalu tunggu sampai proses download selesai.
2. Buat Controller dengan nama AuthController
Masih di terminal, jalankan perintah php artisan make:controller AuthController. perintah ini akan membuat file AuthController.php yang berada pada folder app\Http\Controllers.3. Buat function Login.
Buka file AuthController.php dan buat function Login di dalamnya. di bawah ini adalah code dari function Login:
public function login(Request $request)
{
$http =new \GuzzleHttp\Client;
try{
$respone=$http->post(config('services.passport.login_endpoint'),[
'form_params'=>[
'grant_type'=>'password',
'client_id'=>config('services.passport.client_id'),
'client_secret'=>config('services.passport.client_secret'),
'username'=>$request->username,
'password'=>$request->password,
],
'http_errors' => false
]);
return $respone->getBody();
}
catch(\GuzzleHttp\Exception\BadResponeException $e){
if ($e->getcode()==400){
return response()->json('Invalid Request. Please enter a username or a password.',$e->getcode());
}else if ($e->getcode()==401){
return response()->json('Your credentials are incorrect. PLease try again.',$e->getcode());
}
return response()->json('Something went wrong on the server.',$e->getcode());
}
}
{
$http =new \GuzzleHttp\Client;
try{
$respone=$http->post(config('services.passport.login_endpoint'),[
'form_params'=>[
'grant_type'=>'password',
'client_id'=>config('services.passport.client_id'),
'client_secret'=>config('services.passport.client_secret'),
'username'=>$request->username,
'password'=>$request->password,
],
'http_errors' => false
]);
return $respone->getBody();
}
catch(\GuzzleHttp\Exception\BadResponeException $e){
if ($e->getcode()==400){
return response()->json('Invalid Request. Please enter a username or a password.',$e->getcode());
}else if ($e->getcode()==401){
return response()->json('Your credentials are incorrect. PLease try again.',$e->getcode());
}
return response()->json('Something went wrong on the server.',$e->getcode());
}
}
4. Buat Route login di file Api.php
Buka file routes\api.php dan tambahkan code berikut:
Route::post('/login','AuthController@login');
code di atas adalah untuk menambahkan satu route baru ke dalam server dengan nama login yang bisa di akses lewat url public/api/login. Dan ketika url ini di panggil, server akan melakukan proses lewat function Login yang berada di AuthController.php5.Edit file services.php
Buka file config\services.php dan tambahkan code berikut
'passport'=>[
'login_endpoint'=> env('PASSPORT_LOGIN_ENDPOINT'),
'client_id'=> env('PASSPORT_CLIENT_ID'),
'client_secret'=> env('PASSPORT_CLIENT_SECRET'),
],
'login_endpoint'=> env('PASSPORT_LOGIN_ENDPOINT'),
'client_id'=> env('PASSPORT_CLIENT_ID'),
'client_secret'=> env('PASSPORT_CLIENT_SECRET'),
],
Kita membuat code di atas, karena kita tidak akan menaruh url login, client_secret dan id di dalam function Login, melainkan di dalam file .ENV. hal ini akan memudahkan kita apabila ada perubahan parameter di atar kedepannya.
5. Edit file .env
Buka file .envdan tambahkan code berikut ini:
PASSPORT_LOGIN_ENDPOINT="http://127.0.0.1/simkopmobile/public/oauth/token"
PASSPORT_CLIENT_ID=2
PASSPORT_CLIENT_SECRET=CGvTHrZsI5T9aVznAWhovDd03GjObgnBDVWLVlqo
PASSPORT_CLIENT_ID=2
PASSPORT_CLIENT_SECRET=CGvTHrZsI5T9aVznAWhovDd03GjObgnBDVWLVlqo
Demikianlah cara untuk menyembunyikan client_secret pada proses login ke API server. Sampai di sini kita sudah belajar semua tahap dasar dalam membuat API Server menggunakan Laravel. Untuk proses selanjutnya silahkan kembangkan sesuai keperluan.
RELATED ARTIKEL
Comments
Post a Comment