php tips

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 ."<br>";
 
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 😉

NO SPAM. Non fornirò la tua email a terzi e riceverai solo contenuti che ti interessano sugli argomenti che tratto e potrai cancellarti quando vuoi con un link che trovi in tutte le email.