200 Response
Published in

200 Response

JWT & Laravel 5

Json Web Token o JWT es un standard abierto que define como transmitir datos seguros de manera compacta y auto contenida entre servidores o servicios mediante el uso de JSON (RFC 7519), la información contenida en un JWT es confiable y verificada gracias a que esta firmada digitalmente, el JWT puede ser firmado mediante una llave secreta (secret key) haciendo uso del algoritmo HMAC o también puede ser firmada mediante llaves RSA.

La razón principal de usar JWT es para realizar sistemas de autenticación, hoy en día la mayor parte de aplicaciones SPA (single page application) y las aplicaciones mobiles (APPS) depende de una API (application program interface) debido a la naturaleza de los API estos no guardan estados o sesiones (stateless), además de otros sistemas de autenticación mas propensos a ser vulnerados como el AUTH BASIC, es muy bueno implementar JWT’s ya que nos brindan una manera fácil de validar y autenticar usuarios con nuestras API’s brindando una mayor seguridad y confiabilidad.

Laravel será nuestra herramienta de batalla en este pequeño tutorial de implementación de JWT’s con Laravel en PHP.

Manos a la obra

El primer paso es instalar el paquete de Tymon JWT para Laravel, puede ver el manual de instalación en la siguiente url https://github.com/tymondesigns/jwt-auth/wiki/Installation

"require": {
"tymon/jwt-auth": "0.5.*"
}

y correr el comando composer update para actualizar tus paquetes.

'JWTAuth' => 'Tymon\JWTAuth\Facades\JWTAuth',
'JWTFactory' => 'Tymon\JWTAuth\Facades\JWTFactory'
$ php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"
$ php artisan jwt:generate

Con estos pasos ya tienes implementado las clases para el uso de JWT , ahora debes verificar que tengas el middleware the JWT definidos en el archivo \app\Http\Kernel.php , en caso contrario solo agrega las lineas al final de archivo

protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'jwt.auth' => \Tymon\JWTAuth\Middleware\GetUserFromToken::class,
'jwt.refresh' => \Tymon\JWTAuth\Middleware\RefreshToken::class,


];

Ahora ya puedes proteger tus rutas privadas con JWT token, puedes usar el middleware jwt.auth

Route::group(['middleware' => 'jwt.auth'],function(){  
//tus rutas seguras
});

Ahora para generar un JWT token mediante tu API debes usar el siguiente método, JWTAuth::attempt este método recibe como parámetros el email y contraseña y automáticamente verifica las credenciales con tu modelo o clase \User y si las credenciales son correctas entonces te regresa un token que debes proporcionarlo como response a tu cliente.

$token = JWTAuth::attempt($credentials)

Este es un ejemplo del “login” de una API que recibe email y password y regresa el JWT token, este token debe ser usado para poder procesar todas las request de tus rutas seguras.

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

//Validate parameters
$validator = Validator::make($credentials, [
'email' => 'required|email|max:255',
'password' => 'required|min:6',
]);

//Check if validation fails
if($validator->fails()){
return response()->json(['error'=>$validator->errors()],Response::HTTP_BAD_REQUEST);
}
try {
// attempt to verify the credentials and create a token for the user
if (! $token = JWTAuth::attempt($credentials)) {
return response()->json(['error' => 'The email or password you entered is incorrect'], 401);
}
} catch (JWTException $e) {
// something went wrong whilst attempting to encode the token
return response()->json(['error' => 'could_not_create_token'], 500);
}
// all good so return the token
return response()->json(compact('token'));
}

ahora para poder usar tu token en tus requests debes agregar un header a tu request que se llame Authorization y como valor debes agregar la palabra Bearer seguido por el token y listo, ya tienes aplicado tu JWT token, tus rutas seguras automáticamente validarán el JWT token proporcionado en tu request y aprobarán o denegarán el acceso a tu ruta, recuerda que tu token tiene expiración pero puedes refrescarlo cuando tu desees, si quieres mas información acerca de otros métodos que usa JWT puedes visitar estos links

https://github.com/tymondesigns/jwt-auth/wiki

llamada de API con jwt token — postman

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store