---
# System prepended metadata

title: Untitled

---

## Te dando um resumo: 

Um token é um hash de três partes dividido por dois pontos parte1.parte2.parte3. Que é codificado em Base64

A parte1 e parte3 do token você pode ignorar, eles são parte da expecificação do token e servem para segurança. A parte2 é a que importa.

A parte2 é o chamado payload, o objeto json que será codificado no token, por exemplo: um id de usuário; o payload é usado de modo que a cada requisição você possa identificar o remetente da requisição apenas analizando o payload do token (este objeto JSON).

Um token, para segurança, tem uma data de expiração, por exemplo, uma expiração de 15 minutos. Qualquer token que tenha uma idade maior que 15 minutos, neste caso seria inválido e recusado pelo servidor.

Por alguma biblioteca, [Pra PHP achei essa](https://github.com/RobDWaller/ReallySimpleJWT), você pode codificar o token, validar e decodificar em todas as requisições de sua API Rest pra fazer essa validação de acesso.


### Criando um Token com a biblioteca supracitada
```php
use ReallySimpleJWT\Token;

$idDoUsuarioNoBD = 15;
$senhaDoJWT = 'senhasegura'; // Senha da API
$expiracaoDoToken = time() + 900 // Vida de 15 minutos;
$issuer = 'nomeDaMinhaApiRest';

$token = Token::create($idDoUsuarioNoBD, $senhaDoJWT, $expiracaoDoToken, $issuer);

```

### Validando o token

```php
use ReallySimpleJWT\Token;

$token = 'aaa.bbb.ccc'; // Token recebido na requisição da API
$secret = 'senhasegura'; // Senha da API

$eValido = Token::validate($token, $secret);

if ($eValido) {
  // Agora é só pegar os dados do usuário no token
  $dados = Token::getPayload($token, $secret);
  $idDoUsuarioQueEstaRequisitando = $dados['uid'];
  
  echo $BD->query("select * from users where id = ".$idDoUsuarioQueEstaRequisitando);
} else {
  echo "Token invalido ou expirado";
}
```

Não é necessário armazenar nada em nunhuma tabela nessa simples implementação, se o Token expirar, ele simplesmente não é mais válido.

Nessa implementação também é interessante criar uma rota na API que gere um novo token a partir de um token antigo, pra que um app mobile não precise ficar logando novamente sempre que seu token expirar, por exemplo.