{"id":24162,"date":"2021-05-11T13:38:00","date_gmt":"2021-05-11T10:38:00","guid":{"rendered":"https:\/\/themewp.inform.click\/?p=24162"},"modified":"2021-10-18T03:16:45","modified_gmt":"2021-10-18T00:16:45","slug":"come-utilizzare-laravel-passport-per-l-autenticazione-api-rest","status":"publish","type":"post","link":"https:\/\/themewp.inform.click\/it\/come-utilizzare-laravel-passport-per-l-autenticazione-api-rest\/","title":{"rendered":"Come utilizzare Laravel Passport per l&#8217;autenticazione API REST"},"content":{"rendered":"<p>Nello sviluppo web odierno, le API oi servizi web sono molto popolari. Durante lo sviluppo di un&#8217;applicazione mobile, l&#8217;API svolge un ruolo di ponte per il passaggio di dati tra l&#8217;applicazione mobile e il web. Mantenere le chiamate API sicure e autenticate \u00e8 importante per proteggere i dati trasferiti da un&#8217;applicazione all&#8217;altra.<\/p>\n<p>In questo articolo, studiamo Laravel Passport che ci consente di autenticare le API. Passport \u00e8 costruito sulla parte superiore del server OAuth2, che \u00e8 molto pi\u00f9 sicuro nel modo in cui si costruisce.<\/p>\n<p>Quando abbiamo a che fare con le API, inviavamo un token di accesso per verificare se la richiesta in arrivo era valida. Se \u00e8 autorizzato, solo allora dovrebbe consentire l&#8217;interazione con l&#8217;applicazione. Il passaporto Laravel fornisce un modo conveniente per creare e verificare il token rispetto alla chiamata API.<\/p>\n<h3>Installazione<\/h3>\n<p>Per iniziare, supponiamo che tu abbia installato Laravel sul tuo sistema. Per installare Passport, esegui il comando seguente nel terminale.<\/p>\n<pre><code>composer require laravel\/passport<\/code><\/pre>\n<p>Il comando sopra funzionerebbe con l&#8217;ultima versione di Laravel. Se stai utilizzando una versione precedente, il comando sar\u00e0 leggermente diverso a seconda della tua versione di Laravel. Ad esempio, se hai installato Laravel 5.5, il tuo comando dovrebbe essere:<\/p>\n<pre><code>composer require laravel\/passport=~4.0<\/code><\/pre>\n<p>Questo comando crea la propria directory di migrazione del database. Queste migrazioni creeranno tabelle che memorizzano i client e i token di accesso.<\/p>\n<p>Nel tuo <code>config\/app.php<\/code>file, registra il fornitore di servizi Passport nell&#8217;array dei fornitori.<\/p>\n<p>config\/app.php<\/p>\n<pre><code>'providers' =&gt;[\n\u00a0\u00a0....\n\u00a0\u00a0LaravelPassportPassportServiceProvider::class,\n],<\/code><\/pre>\n<p>Eseguiamo la migrazione che creer\u00e0 le tabelle del database per Passport.<\/p>\n<pre><code>php artisan migrate<\/code><\/pre>\n<p>Ora, se vai al tuo client di database, noterai le nuove tabelle create nel tuo database.<\/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=\"Come utilizzare Laravel Passport per l&#039;autenticazione API REST\" ><\/a><\/p>\n<p>Quindi, esegui il comando seguente che crea chiavi di crittografia per generare token di accesso sicuro. Il comando sottostante crea client &quot;accesso personale&quot; e &quot;concessione password&quot; che stanno ottenendo il negozio nella tabella <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=\"Come utilizzare Laravel Passport per l&#039;autenticazione API REST\" ><\/a><\/p>\n<p>L&#8217;utente pu\u00f2 copiare questi token per i passaggi successivi. In realt\u00e0, vedremo 2 modi per creare token di accesso. Uno \u00e8 attraverso questi client &quot;concessione della password&quot; e un altro \u00e8 sull&#8217;autenticazione di accesso.<\/p>\n<h3>Configurazione del passaporto<\/h3>\n<p>Vai alle directory di Laravel e apri il <code>AppUser<\/code>file del modello. In questo file dobbiamo aggiungere <code>LaravelPassportHasApiTokens<\/code>tratto.<\/p>\n<p><strong>app\/Utente.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>Dopo questo, dobbiamo chiamare il <code>Passport::routes<\/code>metodo nel <code>boot<\/code>metodo di <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>Infine, nel <code>config\/auth.php<\/code>file imposta l&#8217;opzione &#8216;driver&#8217; di &#8216;api&#8217; Authentication Guard su &#8216;passaporto&#8217; come segue:<\/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>Crea API REST e proteggila con Laravel Passport<\/h3>\n<p>Laravel crea un file in <code>routes\/api.php<\/code>cui dovremmo dichiarare il nostro endpoint delle API REST. Possiamo proteggere la nostra API aggiungendovi il middleware <code>auth:api<\/code>.<\/p>\n<p><strong>route\/api.php<\/strong><\/p>\n<pre><code>Route::get('\/api\/categories', 'ApiController@categories')-&gt;middleware('auth:api');<\/code><\/pre>\n<p>Per pi\u00f9 endpoint non \u00e8 necessario aggiungere ogni volta il middleware. Invece, possiamo farlo come segue:<\/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>Poich\u00e9 i nostri &quot;prodotti&quot; dell&#8217;endpoint sono protetti se lo chiamiamo direttamente senza token di autorizzazione, otteniamo una risposta &quot;Non autenticato&quot;.<\/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=\"Come utilizzare Laravel Passport per l&#039;autenticazione API REST\" ><\/a><\/p>\n<p>Significa che durante la chiamata all&#8217;API \u00e8 essenziale passare il token di autorizzazione in ogni richiesta. Quindi, Passport verificher\u00e0 il token e restituir\u00e0 la risposta.<\/p>\n<h3>Genera token di accesso per API<\/h3>\n<p>Esistono diversi modi per creare un token di accesso per l&#8217;applicazione. Ne vedremo 2 per questo tutorial.<\/p>\n<h4>Prima opzione<\/h4>\n<p>In un primo momento, devi dare una chiamata a \/oauth\/token con i parametri richiesti e otterrai il token in risposta.<\/p>\n<p>Supponiamo che tu stia utilizzando una <a href=\"https:\/\/themewp.inform.click\/it\/come-utilizzare-guzzle-un-client-http-php-per-l-invio-di-richieste-http\/\" title=\"libreria HTTP Guzzle\" >libreria HTTP Guzzle<\/a> per effettuare richieste API. Supponiamo che tu abbia un altro progetto da cui stai effettuando la richiesta 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>Il codice sopra restituisce un array che contiene una chiave &#8216;access_token&#8217;. I parametri client_id e client_secret che abbiamo ottenuto quando eseguiamo <code>passport:install<\/code>. Puoi anche ottenere questi dettagli dalla tabella del database &#8216;oauth_clients&#8217;.<\/p>\n<p>Prova di nuovo dal postino passando access_token all&#8217;endpoint &quot;prodotti&quot; e dovremmo ottenere la risposta.<\/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=\"Come utilizzare Laravel Passport per l&#039;autenticazione API REST\" ><\/a><\/p>\n<p>In realt\u00e0 devi chiamare questa API come di seguito:<\/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>Seconda opzione<\/h4>\n<p>Nella prima opzione, dovresti conoscere client_id e client_secret per generare il tuo token. Questo potrebbe non essere un modo conveniente in alcuni scenari. Passport fornisce un&#8217;altra opzione per generare il token di accesso solo tramite le credenziali di accesso.<\/p>\n<p>Nel nostro <code>ApiController.php<\/code>aggiungi il metodo di accesso con richiesta di posta e scrivi il codice sottostante.<\/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>Per effettuare questa chiamata API, dobbiamo registrare un percorso per essa.<\/p>\n<p><strong>route\/api.php<\/strong><\/p>\n<pre><code>Route::post('login', 'ApiController@login');<\/code><\/pre>\n<p>L&#8217;utente pu\u00f2 effettuare una richiesta di post HTTP a questa API scrivendo il codice seguente:<\/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=\"Come utilizzare Laravel Passport per l&#039;autenticazione API REST\" ><\/a><\/p>\n<p>Ci auguriamo che tu capisca l&#8217;uso di Laravel Passport per l&#8217;autenticazione dell&#8217;API REST. Ci piacerebbe sentire i tuoi pensieri nella sezione commenti qui sotto. Ti consigliamo anche di <a href=\"https:\/\/www.toptal.com\/laravel\/restful-laravel-api-tutorial\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">leggere<\/a> l&#8217;articolo <a href=\"https:\/\/www.toptal.com\/laravel\/restful-laravel-api-tutorial\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Tutorial API Laravel: come creare e testare un&#8217;API RESTful<\/a> che abbiamo trovato utile per i lettori.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/artisansweb.net\" class=\"external external_icon\">artisansweb.net<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Stai cercando di implementare Laravel Passport nella tua applicazione? In questo articolo, ti mostriamo come installare Passport, configurarlo e come 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":[500],"tags":[846],"class_list":["post-24162","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laravel","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts\/24162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/comments?post=24162"}],"version-history":[{"count":0,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/posts\/24162\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/media\/22200"}],"wp:attachment":[{"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/media?parent=24162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/categories?post=24162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/themewp.inform.click\/it\/wp-json\/wp\/v2\/tags?post=24162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}