PHP JWT: autenticazione con i Json Web Token

Pubblicato il 9 Ottobre 2017

I Json Web Token (JWT) sono uno standard abbastanza recente (nato nel 2015) utilizzato nelle applicazioni moderne per creare sistemi di autenticazione user stateless. Come funziona detto in parole semplici?

Il server, dopo l’autenticazione dell’utente, restituirà il token al client che potrà utilizzarlo per tutte le chiamate successive. Il server estrapolerà le informazioni sull’utente dal token e verificherà che, quest’ultimo, sia stato firmato e verificato con la chiave segreta che conosce solo il server.

Questo sistema è un’ottima soluzione per applicazioni scalabili e sistemi basati su API come le moderne applicazioni web, mobile e social media.

Di seguito vediamo un esempio di implementazione in PHP con la funzione getJwt che genera il token e la funzione checkJwt che lo verifica:


$fields = array(
	'username' => 'Emawebdesign',
	'name' => 'Emanuele'
);

$secret_key = 'your_wonderful_secret_key';

function getJwt($fields = array(), $secretkey = NULL) {

	$encoded_header = base64_encode('{"alg": "HS256","typ": "JWT"}');
	
	$encoded_payload = base64_encode(json_encode($fields));
	
	$header_payload = $encoded_header . '.' . $encoded_payload;
	
	$signature = base64_encode(hash_hmac('sha256', $header_payload, $secretkey, true));
	
	$jwt_token = $header_payload . '.' . $signature;
	
	return $jwt_token;

}

function checkJwt($token = NULL, $secretkey = NULL) {

	$jwt_values = explode('.', $token);
	
	$recieved_signature = $jwt_values[2];
	
	$recievedHeaderAndPayload = $jwt_values[0] . '.' . $jwt_values[1];
	
	$resultedsignature = base64_encode(hash_hmac('sha256', $recievedHeaderAndPayload, $secretkey, true));
	
	if ($resultedsignature == $recieved_signature) return(true);
	else return(false);

}

$token = getJwt($fields, $secret_key);

echo $token ."
"; if (checkJwt($token, $secret_key)) echo "Token valid"; else echo "Token invalid!";

Per non perdere i prossimi articoli e tutorial, iscriviti alla newsletter tramite il box che trovi qui sotto. Riceverai solo cose che ti interessano ed è gratis 😉

Condividi il post con i tuoi amici o colleghi
emawebdesign
Autore: emawebdesign

Full Stack Developer, SEO Specialist, esperto della trasformazione digitale con oltre 20 anni di esperienza.

Pubblicato in: