cabeçalho
o cabeçalho JWT consiste no tipo token e algoritmo usado para assinatura e codificação. Algoritmos podem ser HMAC, SHA256, RSA, HS256 ou RS256.
{
"typ": "JWT",
"alg": "HS256"
}
carga útil
carga útil consiste dos dados da sessão chamados de reivindicações. Abaixo estão alguns dos a norma afirma que podemos usar,
- Emitente(iss)
- Assunto (sub)
- Audiência (aud)
- tempo de Expiração (exp)
- Emitido em (iat)
{
"sub": "user10001",
"iat": 1569302116
}
declarações Personalizadas também podem ser incluídos no conjunto de afirmações. Ao usar os conjuntos de reclamações personalizados,
- não coloque grandes dados em conjuntos de reivindicações. Os conjuntos de reivindicações deviam ser compactos.
- não coloque informações sensíveis uma vez que, JWT pode ser descodificado facilmente.
{
"sub": "user10001",
"iat": 1569302116,
"role": "admin",
"user_id": "user10001"
}
Assinatura
Assinatura é a parte mais importante de um símbolo Web JSON(JWT). A Assinatura é calculada codificando o cabeçalho e a carga útil usando a codificação Base64url e concatenando-os com um separador de período. Que é então dado ao algoritmo criptográfico.
// signature algorithm
data = base64urlEncode( header ) + "." + base64urlEncode( payload )signature = HMAC-SHA256( data, secret_salt )
assim, quando o cabeçalho ou a carga útil muda, a Assinatura tem de ser calculada novamente. Apenas o fornecedor de identidade (IdP) tem a chave privada para calcular a assinatura que impede a adulteração do token.Como funciona?
basicamente, o provedor de identidade (IdP) gera um JWT certificando a identidade do Usuário e servidor de recursos decodifica e verifica a autenticidade do token usando sal secreto / chave pública.
- o utilizador faz sinal ao usar o nome de utilizador e a senha ou o google/facebook.
- Authentication server verifica as credenciais e emite um jwt assinado usando um sal secreto ou uma chave privada.
- o Cliente do usuário usa o JWT para acessar recursos protegidos, passando o JWT no cabeçalho de autorização HTTP.
- Resource server então verifica a autenticidade do token usando a chave secreta sal / pública.