Implementazione di un Sistema di Autenticazione con Token in PHP

by theArchitect
SHARE
Implementazione di un Sistema di Autenticazione con Token in PHP
© Guida-HTML5.it

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-jwt per gestire la creazione e la verifica dei token.
  • Generazione del token: La funzione generateToken crea 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.

Approfondisci con risorse ufficiali

SHARE