<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>sanctum &#8211; SMsoft &#8211; informatica e dintorni</title>
	<atom:link href="https://blog.smsoft.it/tag/sanctum/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.smsoft.it</link>
	<description>consigli settimanali su MacOS, GNU/Linux ed Open Source</description>
	<lastBuildDate>Wed, 07 Oct 2026 17:12:24 +0000</lastBuildDate>
	<language>it-IT</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=89642</generator>
	<item>
		<title>Come generare un nuovo token Laravel Sanctum</title>
		<link>https://blog.smsoft.it/2026/07/14/come-generare-un-nuovo-token-laravel-sanctum/</link>
					<comments>https://blog.smsoft.it/2026/07/14/come-generare-un-nuovo-token-laravel-sanctum/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Tue, 14 Jul 2026 08:30:00 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programmazione]]></category>
		<category><![CDATA[bearer]]></category>
		<category><![CDATA[laravel]]></category>
		<category><![CDATA[sanctum]]></category>
		<guid isPermaLink="false">https://blog.smsoft.it/?p=7092</guid>

					<description><![CDATA[Laravel Sanctum offre un sistema semplice per autenticare API e applicazioni tramite token personali. Se un token viene perso, compromesso o deve essere sostituito, non è possibile recuperarlo dalla tabella personal_access_tokens: occorre revocare quello precedente e generarne uno nuovo. In questo articolo vediamo la procedura completa, usando Laravel Tinker e, in alternativa, un comando Artisan ... <a title="Come generare un nuovo token Laravel Sanctum" class="read-more" href="https://blog.smsoft.it/2026/07/14/come-generare-un-nuovo-token-laravel-sanctum/" aria-label="Per saperne di più su Come generare un nuovo token Laravel Sanctum">Leggi tutto</a>]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Laravel Sanctum offre un sistema semplice per autenticare API e applicazioni tramite token personali. Se un token viene perso, compromesso o deve essere sostituito, non è possibile recuperarlo dalla tabella <code>personal_access_tokens</code>: occorre revocare quello precedente e generarne uno nuovo.</p>



<p class="wp-block-paragraph">In questo articolo vediamo la procedura completa, usando Laravel Tinker e, in alternativa, un comando Artisan personalizzato.</p>



<h2 class="wp-block-heading">Come funziona un token Sanctum</h2>



<p class="wp-block-paragraph">Quando viene creato un token con:</p>



<pre class="wp-block-preformatted"><code>$token = $user->createToken('api-token')->plainTextToken;</code></pre>



<p class="wp-block-paragraph">Sanctum restituisce il token in chiaro una sola volta. Un token può avere un formato simile:</p>



<pre class="wp-block-preformatted">t<code>12|mVx2...token-segreto...</code></pre>



<p class="wp-block-paragraph">La parte iniziale identifica il record nella tabella <code>personal_access_tokens</code>, mentre il segreto viene utilizzato per autenticare le richieste.</p>



<p class="wp-block-paragraph">Per motivi di sicurezza, Sanctum salva nel database soltanto l’hash del token. Di conseguenza, il valore originale non può essere ricostruito successivamente interrogando la tabella.</p>



<h2 class="wp-block-heading">Prerequisiti</h2>



<p class="wp-block-paragraph">Il modello <code>User</code> deve utilizzare il trait <code>HasApiTokens</code>:</p>



<pre class="wp-block-preformatted"><code>&lt;?php<br><br>namespace App\Models;<br><br>use Illuminate\Foundation\Auth\User as Authenticatable;<br>use Laravel\Sanctum\HasApiTokens;<br><br>class User extends Authenticatable<br>{<br>    use HasApiTokens;<br>}</code></pre>



<p class="wp-block-paragraph">Le rotte protette devono invece utilizzare il middleware <code>auth:sanctum</code>:</p>



<pre class="wp-block-preformatted"><code>use Illuminate\Http\Request;<br>use Illuminate\Support\Facades\Route;<br><br>Route::middleware('auth:sanctum')<br>    ->get('/profile', function (Request $request) {<br>        return $request->user();<br>    });</code></pre>



<h2 class="wp-block-heading">Generare un token con Tinker</h2>



<p class="wp-block-paragraph">Il metodo più rapido consiste nell’utilizzare Laravel Tinker.</p>



<p class="wp-block-paragraph">Aprire una shell nel progetto Laravel:</p>



<pre class="wp-block-preformatted"><code>php artisan tinker</code></pre>



<p class="wp-block-paragraph">Individuare l’utente per il quale generare il nuovo token:</p>



<pre class="wp-block-preformatted"><code>$user = App\Models\User::findOrFail(123);</code></pre>



<p class="wp-block-paragraph">Sostituire <code>123</code> con l’ID reale dell’utente.</p>



<p class="wp-block-paragraph">A questo punto è possibile generare il nuovo token:</p>



<pre class="wp-block-preformatted"><code>$newToken = $user->createToken('api-token')->plainTextToken;</code></pre>



<p class="wp-block-paragraph">Per visualizzarlo:</p>



<pre class="wp-block-preformatted"><code>$newToken;</code></pre>



<p class="wp-block-paragraph">Il risultato sarà simile a:</p>



<pre class="wp-block-preformatted"><code>12|mVx2...token-segreto...</code></pre>



<p class="wp-block-paragraph">È importante copiare e salvare immediatamente questo valore. Dopo la creazione, il token in chiaro non sarà più disponibile.</p>



<h2 class="wp-block-heading">Revocare un token specifico</h2>



<p class="wp-block-paragraph">Se si conosce l’ID del vecchio token nella tabella <code>personal_access_tokens</code>, è possibile revocarlo prima di crearne uno nuovo:</p>



<pre class="wp-block-preformatted"><code>$user->tokens()<br>    ->where('id', 456)<br>    ->delete();</code></pre>



<p class="wp-block-paragraph">In questo esempio:</p>



<ul class="wp-block-list">
<li><code>123</code> è l’ID dell’utente;</li>



<li><code>456</code> è l’ID del token da revocare.</li>
</ul>



<p class="wp-block-paragraph">Dopo la revoca, generare il nuovo token:</p>



<pre class="wp-block-preformatted"><code>$newToken = $user->createToken('api-token')->plainTextToken;<br><br>$newToken;</code></pre>



<p class="wp-block-paragraph">Il vecchio token non potrà più essere utilizzato per autenticarsi.</p>



<h2 class="wp-block-heading">Revocare tutti i token dell’utente</h2>



<p class="wp-block-paragraph">Quando si sospetta che un token sia stato compromesso, può essere opportuno invalidare tutte le chiavi API dell’utente:</p>



<pre class="wp-block-preformatted"><code>$user->tokens()->delete();<br><br>$newToken = $user->createToken('api-token')->plainTextToken;<br><br>$newToken;</code></pre>



<p class="wp-block-paragraph">Questa procedura:</p>



<ol class="wp-block-list">
<li>elimina tutti i token associati all’utente;</li>



<li>invalida eventuali applicazioni o dispositivi che li utilizzano;</li>



<li>genera un nuovo token;</li>



<li>restituisce il nuovo valore in chiaro.</li>
</ol>



<p class="wp-block-paragraph">È una soluzione efficace, ma va usata con attenzione perché tutti i client dovranno essere aggiornati con il nuovo token.</p>



<h2 class="wp-block-heading">Creare un token con permessi specifici</h2>



<p class="wp-block-paragraph">Sanctum permette di associare al token un insieme di abilità, dette abilities.</p>



<p class="wp-block-paragraph">Per esempio:</p>



<pre class="wp-block-preformatted"><code>$newToken = $user->createToken(<br>    'api-token',<br>    ['orders:read', 'orders:write']<br>)->plainTextToken;</code></pre>



<p class="wp-block-paragraph">In questo caso il token può essere utilizzato per le operazioni relative alla lettura e alla modifica degli ordini.</p>



<p class="wp-block-paragraph">Per concedere tutti i permessi disponibili:</p>



<pre class="wp-block-preformatted"><code>$newToken = $user->createToken(<br>    'api-token',<br>    ['*']<br>)->plainTextToken;</code></pre>



<p class="wp-block-paragraph">Quando possibile, è preferibile assegnare soltanto i permessi necessari, seguendo il principio del privilegio minimo.</p>



<h2 class="wp-block-heading">Utilizzare il token nelle richieste HTTP</h2>



<p class="wp-block-paragraph">Il token deve essere inviato nell’header <code>Authorization</code>:</p>



<pre class="wp-block-preformatted"><code>Authorization: Bearer 12|mVx2...token-segreto...</code></pre>



<p class="wp-block-paragraph">Esempio con cURL:</p>



<pre class="wp-block-preformatted"><code>curl https://example.com/api/profile \<br>  -H "Accept: application/json" \<br>  -H "Authorization: Bearer 12|mVx2...token-segreto..."</code></pre>



<p class="wp-block-paragraph">Se il token è valido e la rotta utilizza <code>auth:sanctum</code>, Laravel autenticherà la richiesta e renderà disponibile l’utente tramite:</p>



<pre class="wp-block-preformatted"><code>$request->user();</code></pre>



<h2 class="wp-block-heading">Creare un comando Artisan dedicato</h2>



<p class="wp-block-paragraph">Se questa operazione deve essere eseguita frequentemente, è possibile creare un comando Artisan personalizzato:</p>



<pre class="wp-block-preformatted"><code>php artisan make:command RegenerateSanctumToken</code></pre>



<p class="wp-block-paragraph">Aprire il file:</p>



<pre class="wp-block-preformatted"><code>app/Console/Commands/RegenerateSanctumToken.php</code></pre>



<p class="wp-block-paragraph">e inserire il seguente codice:</p>



<pre class="wp-block-preformatted"><code>&lt;?php<br><br>namespace App\Console\Commands;<br><br>use App\Models\User;<br>use Illuminate\Console\Command;<br><br>class RegenerateSanctumToken extends Command<br>{<br>    protected $signature = 'user:token<br>                            {user : ID dell’utente}<br>                            {--revoke-all : Revoca tutti i token esistenti}<br>                            {--name=api-token : Nome del nuovo token}';<br><br>    protected $description = 'Genera un nuovo token Laravel Sanctum per un utente';<br><br>    public function handle(): int<br>    {<br>        $user = User::find($this->argument('user'));<br><br>        if (!$user) {<br>            $this->error('Utente non trovato.');<br><br>            return self::FAILURE;<br>        }<br><br>        if ($this->option('revoke-all')) {<br>            $user->tokens()->delete();<br>        }<br><br>        $token = $user<br>            ->createToken($this->option('name'))<br>            ->plainTextToken;<br><br>        $this->newLine();<br>        $this->info('Nuovo token generato:');<br>        $this->line($token);<br>        $this->newLine();<br>        $this->warn(<br>            'Salvalo ora: non sarà possibile recuperarlo dal database.'<br>        );<br><br>        return self::SUCCESS;<br>    }<br>}</code></pre>



<h2 class="wp-block-heading">Utilizzare il comando</h2>



<p class="wp-block-paragraph">Per generare un token lasciando attivi quelli esistenti:</p>



<pre class="wp-block-preformatted"><code>php artisan user:token 123</code></pre>



<p class="wp-block-paragraph">Per revocare tutti i token esistenti e generarne uno nuovo:</p>



<pre class="wp-block-preformatted"><code>php artisan user:token 123 --revoke-all</code></pre>



<p class="wp-block-paragraph">Per assegnare un nome personalizzato:</p>



<pre class="wp-block-preformatted"><code>php artisan user:token 123 --name=mobile-app</code></pre>



<p class="wp-block-paragraph">È possibile combinare le opzioni:</p>



<pre class="wp-block-preformatted"><code>php artisan user:token 123 \<br>  --name=mobile-app \<br>  --revoke-all</code></pre>



<h2 class="wp-block-heading">Buone pratiche di sicurezza</h2>



<p class="wp-block-paragraph">Un token Sanctum deve essere trattato come una password.</p>



<ul class="wp-block-list">
<li>Non inserirlo nel codice sorgente.</li>



<li>Non pubblicarlo in repository Git.</li>



<li>Non copiarlo nei log applicativi.</li>



<li>Non inserirlo in screenshot o ticket pubblici.</li>



<li>Trasmetterlo soltanto tramite HTTPS.</li>



<li>Revocarlo immediatamente se si sospetta una compromissione.</li>



<li>Utilizzare token separati per applicazioni e dispositivi diversi.</li>



<li>Assegnare soltanto le abilities necessarie.</li>



<li>Salvare il token in un secret manager o in una variabile d’ambiente protetta.</li>
</ul>



<p class="wp-block-paragraph">Per esempio, in un ambiente locale è possibile configurare un token in <code>.env</code>:</p>



<pre class="wp-block-preformatted"><code>SANCTUM_API_TOKEN=12|mVx2...token-segreto...</code></pre>



<p class="wp-block-paragraph">Il file <code>.env</code> non deve essere versionato né esposto pubblicamente.</p>



<h2 class="wp-block-heading">Conclusione</h2>



<p class="wp-block-paragraph">Un token Laravel Sanctum perso non può essere ricostruito dalla tabella <code>personal_access_tokens</code>, perché nel database viene conservato soltanto il suo hash. La procedura corretta consiste nel revocare il token precedente, quando necessario, e generarne uno nuovo tramite <code>createToken()</code>.</p>



<p class="wp-block-paragraph">La procedura più rapida è:</p>



<pre class="wp-block-preformatted"><code>$user = App\Models\User::findOrFail(123);<br><br>$user->tokens()->delete();<br><br>$newToken = $user->createToken('api-token')->plainTextToken;<br><br>$newToken;</code></pre>



<p class="wp-block-paragraph">Il valore restituito deve essere copiato immediatamente e utilizzato come Bearer token nelle successive richieste API.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">enjoy!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.smsoft.it/2026/07/14/come-generare-un-nuovo-token-laravel-sanctum/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
