{"id":27559,"date":"2021-05-11T13:00:00","date_gmt":"2021-05-11T10:00:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=27559"},"modified":"2021-10-17T17:16:05","modified_gmt":"2021-10-17T14:16:05","slug":"como-usar-laravel-passport-para-la-autenticacion-de-api-rest","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/es\/como-usar-laravel-passport-para-la-autenticacion-de-api-rest\/","title":{"rendered":"C\u00f3mo usar Laravel Passport para la autenticaci\u00f3n de API REST"},"content":{"rendered":"<p>En el desarrollo web actual, las API o los servicios web son muy populares. Al desarrollar una aplicaci\u00f3n m\u00f3vil, la API juega un papel de puente para pasar datos entre la aplicaci\u00f3n m\u00f3vil y la web. Mantener las llamadas a las API seguras y autenticadas es importante para proteger los datos que se transfieren de una aplicaci\u00f3n a otra.<\/p>\n<p>En este art\u00edculo, estudiamos sobre Laravel Passport que nos permite autenticar API. Passport est\u00e1 construido en la parte superior del servidor OAuth2, que es mucho m\u00e1s seguro en la forma en que se construye.<\/p>\n<p>Cuando se trata de las API, sol\u00edamos enviar un token de acceso para verificar si la solicitud entrante es v\u00e1lida. Si est\u00e1 autorizado, solo debe permitir interactuar con la aplicaci\u00f3n. El pasaporte de Laravel proporciona una forma conveniente de crear y verificar el token con la llamada a la API.<\/p>\n<h3>Instalaci\u00f3n<\/h3>\n<p>Para comenzar, asumimos que ha instalado Laravel en su sistema. Para instalar Passport, ejecute el siguiente comando en la terminal.<\/p>\n<pre><code>composer require laravel\/passport<\/code><\/pre>\n<p>El comando anterior funcionar\u00eda con la \u00faltima versi\u00f3n de Laravel. Si est\u00e1 ejecutando una versi\u00f3n anterior, el comando ser\u00e1 ligeramente diferente seg\u00fan su versi\u00f3n de Laravel. Por ejemplo, si tiene Laravel 5.5 instalado, su comando deber\u00eda ser:<\/p>\n<pre><code>composer require laravel\/passport=~4.0<\/code><\/pre>\n<p>Este comando crea su propio directorio de migraciones de base de datos. Estas migraciones crear\u00e1n tablas que almacenan los clientes y tokens de acceso.<\/p>\n<p>En su <code>config\/app.php<\/code>archivo, registre el proveedor de servicios de Passport en la matriz de proveedores.<\/p>\n<p>config \/ app.php<\/p>\n<pre><code>'providers' =&gt;[\n\u00a0\u00a0....\n\u00a0\u00a0LaravelPassportPassportServiceProvider::class,\n],<\/code><\/pre>\n<p>Ejecutemos la migraci\u00f3n que crear\u00e1 las tablas de la base de datos para Passport.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Ahora, si va a su cliente de base de datos, notar\u00e1 las nuevas tablas creadas en su base de datos.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f24e4c0.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f24e4c0.png\" alt=\"C\u00f3mo usar Laravel Passport para la autenticaci\u00f3n de API REST\" ><\/a><\/p>\n<p>A continuaci\u00f3n, ejecute el siguiente comando que crea claves de cifrado para generar tokens de acceso seguro. El siguiente comando crea clientes de &quot;acceso personal&quot; y &quot;concesi\u00f3n de contrase\u00f1a&quot; que se almacenan en la tabla <code>oauth_clients<\/code>.<\/p>\n<pre><code>php artisan passport:install<\/code><\/pre>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" alt=\"C\u00f3mo usar Laravel Passport para la autenticaci\u00f3n de API REST\" ><\/a><\/p>\n<p>El usuario puede copiar estos tokens para los siguientes pasos. De hecho, vamos a ver 2 formas de crear tokens de acceso. Uno es a trav\u00e9s de estos clientes de &quot;concesi\u00f3n de contrase\u00f1a&quot; y otro es la autenticaci\u00f3n de inicio de sesi\u00f3n.<\/p>\n<h3>Configuraci\u00f3n de pasaporte<\/h3>\n<p>Dir\u00edgete a los directorios de Laravel y abre el <code>AppUser<\/code>archivo del modelo. En este archivo necesitamos agregar un <code>LaravelPassportHasApiTokens<\/code>rasgo.<\/p>\n<p><strong>aplicaci\u00f3n \/ User.php<\/strong>.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace App;\n\u00a0\nuse LaravelPassportHasApiTokens;\nuse IlluminateNotificationsNotifiable;\nuse IlluminateFoundationAuthUser as Authenticatable;\n\u00a0\nclass User extends Authenticatable\n{\n\u00a0\u00a0\u00a0\u00a0use HasApiTokens, Notifiable;\n\u00a0\u00a0\u00a0\u00a0....\n}<\/code><\/pre>\n<p>Despu\u00e9s de esto, tenemos que llamar al <code>Passport::routes<\/code>m\u00e9todo en el <code>boot<\/code>m\u00e9todo de <code>AuthServiceProvider<\/code>.<\/p>\n<p><strong>app \/ Providers \/ AuthServiceProvider.php<\/strong><\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppProviders;\n\u00a0\nuse LaravelPassportPassport;\nuse IlluminateSupportFacadesGate;\nuse IlluminateFoundationSupportProvidersAuthServiceProvider as ServiceProvider;\n\u00a0\nclass AuthServiceProvider extends ServiceProvider\n{\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* The policy mappings for the application.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @var array\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0protected $policies = [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'AppModel' =&gt; 'AppPoliciesModelPolicy',\n\u00a0\u00a0\u00a0\u00a0];\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\/**\n\u00a0\u00a0\u00a0\u00a0\u00a0* Register any authentication \/ authorization services.\n\u00a0\u00a0\u00a0\u00a0\u00a0*\n\u00a0\u00a0\u00a0\u00a0\u00a0* @return void\n\u00a0\u00a0\u00a0\u00a0\u00a0*\/\n\u00a0\u00a0\u00a0\u00a0public function boot()\n\u00a0\u00a0\u00a0\u00a0{\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this-&gt;registerPolicies();\n\u00a0\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Passport::routes();\n\u00a0\u00a0\u00a0\u00a0}\n}<\/code><\/pre>\n<p>Por \u00faltimo, en el <code>config\/auth.php<\/code>archivo, configure la opci\u00f3n &#8216;controlador&#8217; de la protecci\u00f3n de autenticaci\u00f3n &#8216;api&#8217; en &#8216;pasaporte&#8217; de la siguiente manera:<\/p>\n<p><strong>config \/ auth.php<\/strong><\/p>\n<pre><code>'guards' =&gt; [\n\u00a0\u00a0\u00a0\u00a0'web' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'driver' =&gt; 'session',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider' =&gt; 'users',\n\u00a0\u00a0\u00a0\u00a0],\n\u00a0\n\u00a0\u00a0\u00a0\u00a0'api' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'driver' =&gt; 'passport',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'provider' =&gt; 'users',\n\u00a0\u00a0\u00a0\u00a0],\n],<\/code><\/pre>\n<h3>Cree una API REST y prot\u00e9jala con Laravel Passport<\/h3>\n<p>Laravel crea un archivo <code>routes\/api.php<\/code>donde debemos declarar nuestro punto final de API REST. Podemos proteger nuestra API agregando el middleware <code>auth:api<\/code>.<\/p>\n<p><strong>rutas \/ api.php<\/strong><\/p>\n<pre><code>Route::get('\/api\/categories', 'ApiController@categories')-&gt;middleware('auth:api');<\/code><\/pre>\n<p>Para varios puntos finales, no es necesario agregar middleware cada vez. En cambio, podemos hacerlo de la siguiente manera:<\/p>\n<pre><code>Route::group(['middleware' =&gt; 'auth:api'], function(){\n\u00a0\u00a0\u00a0\u00a0Route::get('products', 'ApiController@products');\n\u00a0\u00a0\u00a0\u00a0Route::get('categories', 'ApiController@categories');\n});<\/code><\/pre>\n<p>Como nuestros &#8216;productos&#8217; de punto final est\u00e1n protegidos si lo llamamos directamente sin el token de autorizaci\u00f3n, obtenemos una respuesta &#8216;No autenticado&#8217;.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" alt=\"C\u00f3mo usar Laravel Passport para la autenticaci\u00f3n de API REST\" ><\/a><\/p>\n<p>Significa que, al llamar a la API, es esencial pasar el token de autorizaci\u00f3n en cada solicitud. Entonces, Passport verificar\u00e1 el token y devolver\u00e1 la respuesta.<\/p>\n<h3>Generar token de acceso para API<\/h3>\n<p>Hay varias formas de crear un token de acceso para la aplicaci\u00f3n. Veremos 2 de ellos para este tutorial.<\/p>\n<h4>Primera opci\u00f3n<\/h4>\n<p>En una primera forma, debes llamar al token \/ oauth \/ con los par\u00e1metros requeridos y obtendr\u00e1s el token como respuesta.<\/p>\n<p>Suponemos que est\u00e1 utilizando una <a href=\"https:\/\/themewp.inform.click\/es\/como-utilizar-guzzle-un-cliente-http-php-para-enviar-solicitudes-http\/\" title=\"biblioteca HTTP de Guzzle\" >biblioteca HTTP de Guzzle<\/a> para realizar una solicitud de API. Supongamos que tiene otro proyecto desde el que realiza una solicitud de API.<\/p>\n<pre><code>&lt;?php\nrequire_once \"vendor\/autoload.php\";\n\u00a0\nuse GuzzleHttpClient;\n\u00a0\n$client = new Client([\n\u00a0\u00a0\u00a0\u00a0\/\/ Base URI is used with relative requests\n\u00a0\u00a0\u00a0\u00a0'base_uri' =&gt; 'http:\/\/laravel.dev',\n]);\n\u00a0\n$response = $client-&gt;post('\/oauth\/token', [\n\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'grant_type' =&gt; 'password',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'client_id' =&gt; '2',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'client_secret' =&gt; '8qyKG7WKb3O3FZh2hUyEOZ3dAj5l9S5ljn2bdeJf',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'username' =&gt; 'sajid@test.com',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'password' =&gt; 'my_password',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'scope' =&gt; '*',\n\u00a0\u00a0\u00a0\u00a0],\n]);\n\u00a0\n$arr_result = json_decode((string) $response-&gt;getBody(), true);<\/code><\/pre>\n<p>El c\u00f3digo anterior devuelve una matriz que contiene una clave &#8216;access_token&#8217;. Los par\u00e1metros client_id y client_secret que obtuvimos cuando ejecutamos <code>passport:install<\/code>. Tambi\u00e9n puede obtener estos detalles de la tabla de su base de datos &#8216;oauth_clients&#8217;.<\/p>\n<p>Vuelva a intentarlo desde el cartero pasando el access_token al punto final de &#8216;productos&#8217; y deber\u00edamos obtener la respuesta.<\/p>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" alt=\"C\u00f3mo usar Laravel Passport para la autenticaci\u00f3n de API REST\" ><\/a><\/p>\n<p>En realidad, debe llamar a esta API como se muestra a continuaci\u00f3n:<\/p>\n<pre><code>$response = $client-&gt;get('\/products', [\n\u00a0\u00a0\u00a0\u00a0'headers' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Authorization' =&gt; 'Bearer '.$access_token,\n\u00a0\u00a0\u00a0\u00a0]\n]);\n\u00a0\n$arr_result = json_decode((string) $response-&gt;getBody(), true);<\/code><\/pre>\n<h4>Segunda opci\u00f3n<\/h4>\n<p>En la primera opci\u00f3n, debe conocer client_id y client_secret para generar su token. Esta puede no ser una forma conveniente en algunos escenarios. Passport ofrece otra opci\u00f3n para generar token de acceso mediante credenciales de inicio de sesi\u00f3n \u00fanicamente.<\/p>\n<p>En nuestro, <code>ApiController.php<\/code>agregue el m\u00e9todo de inicio de sesi\u00f3n con la solicitud de publicaci\u00f3n y escriba el c\u00f3digo a continuaci\u00f3n.<\/p>\n<pre><code>&lt;?php\n\u00a0\nnamespace AppHttpControllers;\n\u00a0\nuse IlluminateHttpRequest;\nuse IlluminateSupportFacadesStorage;\nuse IlluminateSupportFacadesAuth;\n\u00a0\nclass ApiController extends Controller\n{\n\u00a0\u00a0\u00a0\u00a0public function login(){ \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if(Auth::attempt(['email' =&gt; request('email'), 'password' =&gt; request('password')])){ \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$user = Auth::user(); \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$success['token'] =\u00a0 $user-&gt;createToken('MyApp')-&gt; accessToken; \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return response()-&gt;json(['success' =&gt; $success], 200); \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else{ \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return response()-&gt;json(['error'=&gt;'Unauthorised'], 401); \n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \n\u00a0\u00a0\u00a0\u00a0}<\/code><\/pre>\n<p>Para realizar esta llamada a la API, necesitamos registrar una ruta para ella.<\/p>\n<p><strong>rutas \/ api.php<\/strong><\/p>\n<pre><code>Route::post('login', 'ApiController@login');<\/code><\/pre>\n<p>El usuario puede realizar una solicitud de publicaci\u00f3n HTTP a esta API escribiendo el c\u00f3digo a continuaci\u00f3n:<\/p>\n<pre><code>$response = $client-&gt;post('\/api\/login', [\n\u00a0\u00a0\u00a0\u00a0'form_params' =&gt; [\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'email' =&gt; 'sajid@test.com',\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'password' =&gt; 'my_password'\n\u00a0\u00a0\u00a0\u00a0],\n]);\n\u00a0\n$arr_result = json_decode((string) $response-&gt;getBody(), true);<\/code><\/pre>\n<p><a href=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" data-rel=\"lightbox\" ><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/themewp.inform.click\/wp-content\/uploads\/2021\/04\/post-20656-608215f2ddc78.png\" alt=\"C\u00f3mo usar Laravel Passport para la autenticaci\u00f3n de API REST\" ><\/a><\/p>\n<p>Esperamos que comprenda el uso de Laravel Passport para la autenticaci\u00f3n de API REST. Nos gustar\u00eda conocer su opini\u00f3n en la secci\u00f3n de comentarios a continuaci\u00f3n. Tambi\u00e9n recomendamos <a href=\"https:\/\/www.toptal.com\/laravel\/restful-laravel-api-tutorial\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">leer<\/a> el art\u00edculo <a href=\"https:\/\/www.toptal.com\/laravel\/restful-laravel-api-tutorial\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Tutorial de la API de Laravel: C\u00f3mo construir y probar una API RESTful<\/a> que encontramos \u00fatil para los lectores.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00bfEst\u00e1 buscando implementar Laravel Passport en su aplicaci\u00f3n? En este art\u00edculo, le mostramos a ypu c\u00f3mo instalar Passport, configurarlo y c\u00f3mo usarlo.<\/p>\n","protected":false},"author":1,"featured_media":22200,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[495],"tags":[849],"class_list":["post-27559","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/27559","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/comments?post=27559"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/posts\/27559\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media\/22200"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/media?parent=27559"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/categories?post=27559"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/es\/wp-json\/wp\/v2\/tags?post=27559"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}