Introduzione
In questo tutorial, esploreremo come implementare un sistema di autenticazione basato su token in PHP. Questo approccio è particolarmente utile per applicazioni web moderne, dove la separazione tra client e server è fondamentale. Utilizzeremo JSON Web Tokens (JWT) per gestire l´autenticazione degli utenti in modo sicuro e scalabile.
Codice completo
Di seguito, presentiamo un esempio di codice completo per un sistema di autenticazione basato su token. Assicurati di avere installato la libreria firebase/php-jwt per gestire i JWT. Puoi installarla tramite Composer con il comando:
composer require firebase/php-jwt Il codice seguente mostra un semplice sistema di login e generazione di token:
<?php
require ´vendor/autoload.php´;
use FirebaseJWTJWT;
session_start();
// Configurazione della chiave segreta
$secretKey = ´your_secret_key´;
// Funzione per generare un token
function generateToken($userId) {
global $secretKey;
$payload = [
´iat´ => time(), // Data di emissione
´exp´ => time() + 3600, // Scadenza del token (1 ora)
´sub´ => $userId // ID dell´utente
];
return JWT::encode($payload, $secretKey);
}
// Simulazione di un database di utenti
$users = [
[´id´ => 1, ´username´ => ´admin´, ´password´ => password_hash(´admin123´, PASSWORD_BCRYPT)],
[´id´ => 2, ´username´ => ´user´, ´password´ => password_hash(´user123´, PASSWORD_BCRYPT)]
];
// Login dell´utente
if ($_SERVER[´REQUEST_METHOD´] === ´POST´) {
$username = $_POST[´username´];
$password = $_POST[´password´];
foreach ($users as $user) {
if ($user[´username´] === $username && password_verify($password, $user[´password´])) {
// Autenticazione riuscita, generiamo un token
$token = generateToken($user[´id´]);
echo json_encode([´token´ => $token]);
exit;
}
}
echo json_encode([´error´ => ´Credenziali non valide´]);
}
?>
<form method="POST">
<label for="username">Username:</label>
<input type="text" name="username" required>
<label for="password">Password:</label>
<input type="password" name="password" required>
<button type="submit">Login</button>
</form>
Spiegazione
Il codice presentato in precedenza è un semplice esempio di sistema di autenticazione. Ecco una spiegazione dettagliata di ciascuna parte:
- Includere la libreria JWT: Utilizziamo la libreria
firebase/php-jwtper gestire la creazione e la verifica dei token. - Generazione del token: La funzione
generateTokencrea un token JWT che include l´ID dell´utente, la data di emissione e la data di scadenza. - Simulazione del database: Abbiamo creato un array di utenti per simulare un database. Le password sono memorizzate in modo sicuro utilizzando l´hashing.
- Login dell´utente: Quando l´utente invia il modulo di login, verifichiamo le credenziali. Se sono corrette, generiamo un token e lo restituiamo in formato JSON.
Best practice
Quando implementi un sistema di autenticazione basato su token, considera le seguenti best practice:
- Usa HTTPS: Assicurati che la tua applicazione utilizzi HTTPS per proteggere i dati degli utenti durante la trasmissione.
- Scadenza del token: Imposta una scadenza per i token per ridurre il rischio di accesso non autorizzato.
- Revoca dei token: Implementa un sistema per revocare i token se un utente cambia la password o se sospetti attività sospette.
- Controllo delle autorizzazioni: Assicurati di controllare le autorizzazioni degli utenti per ogni richiesta protetta.
Riepilogo
In questo tutorial, abbiamo visto come implementare un sistema di autenticazione basato su token in PHP utilizzando JSON Web Tokens. Questo approccio offre una maggiore sicurezza e flessibilità rispetto ai tradizionali sistemi di autenticazione basati su sessioni. Ricorda di seguire le best practice per garantire la sicurezza della tua applicazione.
