
02
AugustSeguridad inicial para las rutas API en Laravel con api_key
En este artículo aprenderemos a asegurar la rutas API de Laravel por medio de un código de API_KEY similar a lo que hacer google para la seguridad de sus distintas APIS que libera a los desarrolladores.
<script async defer src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap" type="text/javascript">script>
En este caso utilizaremos esta verificación por medio de un middleware en Laravel, asi que para ello lo primero a realizar será crearlo por medio del comando:
php artisan make:middleware ApiKeyValidate
Luego dentro de esta clase que se ubica dentro de app/http/middleware añadiremos estas lineas de código:
namespace App\Http\Middleware;
use Closure;
class ApiKeyValidate
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!$request->has("api_key")) {
return response()->json([
'status' => 401,
'message' => 'Acceso no autorizado',
], 401);
}
if ($request->has("api_key")) {
$api_key = "key_cur_prod_fnPqT5xQEi5Vcb9wKwbCf65c3BjVGyBB";
if ($request->input("api_key") != $api_key) {
return response()->json([
'status' => 401,
'message' => 'Acceso no autorizado',
], 401);
}
}
return $next($request);
}
}
Este será nuestro API_KEY que deberemos de utilizar para poder hacer consultas a nuestras rutas de Laravel
key_cur_prod_fnPqT5xQEi5Vcb9wKwbCf65c3BjVGyBB
El siguiente paso es registrar nuestro middleware dentro del Kernel que se ubica dentro de la siguiente ruta app/http/Kernel.php, En este archivo agregaremos el Middleware en la parte final del array como apikey.validate
/**
* The application's route middleware.
*
* These middleware may be assigned to groups or used individually.
*
* @var array
*/
protected $routeMiddleware = [
'auth' => \Illuminate\Auth\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'apikey.validate' => \App\Http\Middleware\ApiKeyValidate::class,
];
Para finalizar aplicaremos el middleware en nuestras rutas que hemos creado ya sea dentro del archivo routes/api.php o routes/web.php por medio de un Route::group
/*
|--------------------------------------------------------------------------
| API Routes
|--------------------------------------------------------------------------
|
| Here is where you can register API routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| is assigned the "api" middleware group. Enjoy building your API!
|
*/
Route::group(["middleware" => "apikey.validate"], function () {
//Rutas
Route::post("login", "Api\UserController@postLogin");
Route::get("cursos", "Api\CursoController@getCursos");
});
Finalmente si hacemos una consulta a la ruta sin colocar el api_key al final esta nos retornará el mensaje de acceso no autorizado.
Pero si por el contrario colocamos el api_key al final como parámetro podremos hacer la consulta a la ruta sin problemas.
Bien, gracias por haber leído este post hasta el final, si tienes algunas ideas para los próximos artículos, déjanos en los comentarios.