Skip to content

Instantly share code, notes, and snippets.

@NandoKstroNet
Created July 23, 2019 00:36
Show Gist options
  • Save NandoKstroNet/3f009efdfa4fb64612a2c03658b3d878 to your computer and use it in GitHub Desktop.
Save NandoKstroNet/3f009efdfa4fb64612a2c03658b3d878 to your computer and use it in GitHub Desktop.
Gerando token Jwt com PHP na mão, criado na série sobre JWT no blog: https://blog.codeexpertslearning.com.br
<?php
//Application Key
$key = '';
//Header Token
$header = [
'typ' => 'JWT',
'alg' => 'HS256'
];
//Payload - Content
$payload = [
'exp' => (new DateTime("now"))->getTimestamp(),
'uid' => 1,
'email' => '[email protected]',
];
//JSON
$header = json_encode($header);
$payload = json_encode($payload);
//Base 64
$header = base64_encode($header);
$payload = base64_encode($payload);
//Sign
$sign = hash_hmac('sha256', $header . "." . $payload, $key, true);
$sign = base64_encode($sign);
//Token
$token = $header . '.' . $payload . '.' . $sign;
print $token;
@lcobucci
Copy link

@NandoKstroNet parabéns pelo artigo, mano! Só uma pequena correção: JWT são codificados em base64url e não base64. Você precisa alterar alguns caracteres e remover o padding pra que os tokens possam ser transmitidos em URIs sem alteração alguma. Dá uma olhada em: https://github.com/lcobucci/jose-parsing/blob/master/src/Parser.php

@NandoKstroNet
Copy link
Author

@lcobucci perfeito. Obrigado pela dica man. Vou olhar o parser.

Confesso que eu busquei um método base64url no PHP mas percebi, como você fez, que temos que fazer na mão mesmo né?!

Obrigado pela dica, já vou passar a pensar nisto.

Abs. Sucesso.

@greguly
Copy link

greguly commented Mar 15, 2021

Obrigado @NandoKstroNet pelo artigo e @lcobucci pela dica do base64url.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment