Ambil Token Untuk Akses Resource Tertentu dengan Laravel via Passport (Password Grant Tokens)

Halo, lama tidak menulis lagi, sekarang saya ingin nge-share sekalian mencatat bagaimana menggunakan Passport pada Laravel dengan studi kasus adalah pengambilan token lalu mengakses resources via api tertentu. Pada tulisan ini saya tidak menjelaskan cara melakukan instalasi Passport pada Laravel, silahkan baca pelan-pelan documentasi Laravel Passport yah 🙂

Asumsi awal adalah saya ada orang android ingin mendapatkan voucher yang dimiliki oleh salah satu customer tertentu. Karena android tidak mengenal proses session, maka customer_id tidak mungkin kita lempar begitu saja melalui proses pengiriman data pada http. Walaupun memang jika data-data biasa saja bukan data seperti transferan duit atau password key untuk akses data-data bank, tetep aja kita coba pasang securitynya agar tidak terlalu terbaca datanya.

Untuk itu, proses dari android ke server biasa melalui API dengan teknologi security seperti OAuth yang tentu sudah di-implementasi oleh Passport Laravel. Tanpa panjang lebar, yuk mari kita buka langsung aja server untuk cara awal mendapatkan tokennya.

Langkah #1
Buka lokal atau server api yang sudah terinstall laravel passport. Lalu ketik perintah untuk membuat client_id dan client secret “Password Grant Tokens”.

php artisan passport:client --password

Laravel Passport 1

Setelah berhasil, gunakan client_id dan client_secret untuk mendapatkan token dengan langkah kedua.

Langkah #2
Oke, jika client_id dan client_secret yang sudah didapatkan, sekarang kita coba akses token-nya dengan aplikasi Postman.

Passport Laravel 2

Pada gambar telihat saya input parameter POST, lalu akses URL dengan url sesuai dengan server atau local IP yang sudah terinstall laravel passportnya. URL Akses get token-nya adalah http://namaserver.com/oauth/token.

Parameter POST data yang dikirim adalah

{
    "grant_type": "password",
    "client_id": "5",
    "client_secret": "gr7Y2EnwlpsXli08RIL39Th7rECfsmR49blyyZcA",
    "username": "adiputra@bambideal.com",
    "password": "admin@123",
    "scope": ""
}

Pilih grant_type nya adalah passport, lalu isi client_id dan client_secret yang didapat pada Langkah 1, isi username dan passport login user yang hendak ingin diambil data tokennya. Jika sudah, SEND saja lalu lihat apakah token/access_token bisa didapat. Pada gambar terlihat access_token didapat.

Langkah #3
Jika udah dapet access_token, kita coba apa bener access_token ini bisa mengambil data user yang barusan kita masukan email/username dan passwordnya. Copy dulu access_token yang didapat pada Langkah 2, lalu buat proses pada Postman baru dengan URL seperti pada gambar.

Laravel Passport 3

access_token tadi di-paste pada kolom Headers dengan parameter Authorization, value Bearer[spasi]access_token. Jangan lupa method yang digunakan adalah GET. Cek routes:list pada laravel untuk melihat detail oauth routes pada Passport.

Langkah 4
Jika sudah, jalankan “SEND” dan lihat…data pribadi dari pemilik token sudah didapatkan. Hal ini karena ketika kita buat laravel, sudah ada route routes/api.php yang mengarah pada endpoint /user.

routes/api.php
Laravel Passport 4

Terlihat pada gambar, ada route /user untuk mendapatkan data user dengan akses pembatasan middleware auth:api.

Langkah 5
Jika sudah benar pada langkah 4, pada gambar diatas sebelumnya itu saya ingin membuat api untuk mendapatkan voucher berdasarkan pemilik token.

Route::group(['middleware' => ['auth:api']], function () {
    Route::post('/voucher/get', ['as'=>'api.voucher.get', 'uses'=>'VoucherController@get'] );

});

Lalu bagaimana selanjutnya? agar kita bisa query data voucher berdasarkan token yang dikirim?

Mari kita coba buka controller VoucherController.php

Laravel Passport 5

Terlihat pada gambar, cara mendapatkan customer_id atau id user dari token yang dikirim adalah dengan cara $request->user()->id;

Sekarang mari kita coba untuk tembak api mendapatkan voucher yang telah kita siapkan diproses ini. Buka kembali Postman, lalu buka tab baru untuk proses tembak api terbaru. Dan jalankan proses seperti pada gambar dibawah ini sampai mendapatkan resources yang sesuai 🙂

Laravel Passport 6

Sampai disini selesai sudah caranya agar token bisa dipakai untuk mendapatkan resources dari api dengan Laravel Passport.

Hal penting lainnya soal token/access_token ini adalah expired dan refresh_token yang didapat ketika mendapatkan token diawal tadi. Karena token yang didapat memiliki expired waktu tertentu jadi perlu handle pengecekan apakah token sudah expired atau belun.

Semoga bermanfaat, bingung tinggal kontak-kontakan aja 😀

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: