Json Web Token (JWT) ialah sebuah URL yang dikemas dengan aman untuk mewakili klaim transaksi 2 buah party. Klaim-nya sendiri di encode menjadi JSON object sebagai tandatangan digital mengunakan JWS (JSON Web Signature). Lebih lengkapnya apa itu JWT silahkan cari di google, sepertinya banyak.

Langsung saja, persiapan menangani / membuat RESTFULL API disertai Json Web Token nya sebagai securitynya. Alasan menggunakan Json web Token ialah agar API yang telah kita buat tidak bisa di akses oleh publik yang tidak memiliki token sebagai hak akses untuk mengakses API kita.

Oke tentunya, kita asumsikan sudah install laravel / lumen, disini saya menggunakan laravel 5.1, berikut langkah instalasi dan konfigurasi jwt-auth.

1. Install via composer, edit composer.json pada require tambahkan

"tymon/jwt-auth": "0.5.*"

2. Jalankan composer update untuk mendownload package tersebut
3. Setelah composer selesai mendownload package jwt-auth, kita perlu menambahkan serice provider JWTAuthnya ke providers di app.php, buka file app.php, tambahkan code ini:

'Tymon\JWTAuth\Providers\JWTAuthServiceProvider'

4. Masih di file app.php, pada bagian aliases array, tambahkan juga Facades JWTAuth , berikut codenya :

 'JWTAuth' => 'Tymon\JWTAuth\Facades\JWTAuth'

Juga includekan satu lagi Facade JWTFactory

'JWTAuth' => 'Tymon\JWTAuth\Facades\JWTFactory'

5. Sampai disini, kita siap untuk menjalankan artisan publish config jwtauthnya, berikut commandnya:

php artisan vendor:publish –provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"

Command ini akan menggenerate salah satunya file jwt.php di folder config.

6. Terakhir, kita perlu generate secret key pada file config jwt, commandya

php artisan jwt:generate

Command tersebut akan menggerate secret key yang terletak pada filw jwt.php di folder config

Screenshot from 2015-10-06 13:46:53

→ ttl => setting waktu aktif token (Setting expired time token). Dalam satuan menit.

Sampai disini, kita sudah siap untuk berkoding ria, daftar token, dan menggunakan tokennya.

Pertama tama edit kernel.php laravel, tambahkan kode sbb:

'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class

Kita akan menggunakan middleware jwtAuth. Untuk authentification JWTnya.

Oke lanjut, kita buat sebuah controller dan model untuk handle pendaftaran user dan Token Json nya. Berikut kode saya :

Model User, Sbb:

<?php
/**
 * Created by PhpStorm.
 * User: gus
 * Date: 9/15/15
 * Time: 9:33 AM
 */

namespace App\Http\Model;

use Jenssegers\Mongodb\Model as Eloquent;


class User extends Eloquent {

    protected $connection = 'mongodb';
    protected $collection = 'users';
    protected $fillable = array('username','password','email','fullname');

    $protected $hidden = array('password','remember_token');
}

Controller Authentifikasi dan Pendaftaran User dan Json Token Web

public function authenticate(Request $request) {
		$credentials = $request->only('email', 'password');

		try {
			if (!$token = JWTAuth::attempt($credentials)) {
				return response()->json(['error' => 'invalid_credentials'], 401);
			}
		} catch (JWTException $e) {
			// something went wrong
			return response()->json(['error' => 'could_not_create_token'], 500);
		}

		// if no errors are encountered we can return a JWT
		return response()->json(compact('token'));
	}

	public function getAuthenticatedUser() {
		try {

			if (!$user = JWTAuth::parseToken()->authenticate()) {
				return response()->json(['user_not_found'], 404);
			}

		} catch (TokenExpiredException $e) {

			return response()->json(['token_expired'], $e->getStatusCode());

		} catch (TokenInvalidException $e) {

			return response()->json(['token_invalid'], $e->getStatusCode());

		} catch (JWTException $e) {

			return response()->json(['token_absent'], $e->getStatusCode());

		}

		return response()->json(compact('user'));
	}

	public function register(Request $request) {
		$newuser = $request->all();
		$password = Hash::make($request->input('password'));
		$newuser['password'] = $password;
		return User::create($newuser);
	}

saya letakkan diPastebin Controllernya : http://pastebin.com/Hmr3Fw61

Berikut ruote untuk controller authnya :

Route::post('api/register', 'AuthenticateController@register');
Route::post('api/authenticate', 'AuthenticateController@authenticate');
Route::get('api/authenticate/user', 'AuthenticateController@getAuthenticatedUser');

Kita test pendaftaran JWTnya Pakai Postman.

Pertama, kita daftar dulu , username password dan data lain, asumsikan misal kita mau mendaftar untuk mengakses sebuah layanan API. Nah jom kita daftar.

Berikut contohnya, langsung biarkan gambar berbicara.

Screenshot from 2015-10-06 14:08:43

Nah, data diri sudah terdaftar, maka saatnya kita mendaftar json web tokennya, urlya sesuai pada route yag dibuat tadi. Berikut contohnya :

Screenshot from 2015-10-06 14:10:06

Oke, Token sudah kita dapatkan. Simpan token ini untuk dapat mengakses API.

Langkah selanjutnya, kita buat sebuah Controller APInya, misal APIController. Pada controller API anda, buat / edit fungsi __construct dan isikan dengan middleware jwt auth.

public function __construct() {
   $this->middleware('jwt.auth', ['except' => ['authenticate']]);
}

ini untuk memfilter hak akses terhadap APIya, agar hanya yang punya token saja yang bisa akses.

Buat function getUser() misalnya, didalamnya code untuk menampilkan daftar USER, outout nya tentu JSON, berikut codenya :

public function getUser() {
   return response()->json(User::all());
}

Tambahkan juga routenya.

Route::group(['prefix' => 'api/v1', 'before' => 'auth'], function () {
Route::get('/', 'APIController@index');

Route::get('user', 'APIController@getUser');
});

oke, langsung saja coba kita akses.

Screenshot from 2015-10-06 14:15:28

Nah, karena kita mengaksesnya tidak memakai / menambahkan Token, maka tentu saja data tidak akan tampil. Tambahkan token setelah Url apinya seperti berikut :

Screenshot from 2015-10-06 14:17:00

Nah, kini data tampil karena kita telah sertakan tokennya. Sebagai authnya. Inilah yang dinamakan Json Web Token. Sampai disini tutorial saya.

Selengkapnya tentang package jwtauth ini di : https://github.com/tymondesigns/jwt-auth/

Download Tutorialnya Disini : Pdf File

Download Di Die

9 respons untuk ‘Membuat Json Web Token (JWT) Dengan Laravel 5.1 / Lumen

  1. dan error seperti ini saat tegar@tegar-ThinkPad-E450:/opt/lampp/htdocs/kece$ php artisan vendor:publish –provider=”Tymon\JWTAuth\Providers\JWTAuthServiceProvider”
    sh: 1: /usr/sbin/sendmail: not found

    [RuntimeException]
    Too many arguments.

  2. kang, mohon pencerahannya kan,, saya sudah cob jalankan command
    php artisan vendor:publish –provider=”Tymon\JWTAuth\Providers\JWTAuthServiceProvider”

    berikut response nya,,,

    [Symfony\Component\Console\Exception\RuntimeException]
    Too many arguments.

    tetapi tidak ada ter create file jwt.php dalam folder config nya..

    mohon pencerahannya kang

  3. Artikelnya bagus, tapi saya ada pertanyaan nih..
    Menurut beberapa referensi artikel yang saya baca bukankah lebih baik token JWT di tempatkan di header (Authorization: Bearer ) saat melakukan request ya? Apa sama saja ya dari segi keamanan kalau melalui body atau header?

Tinggalkan komentar