Solução

Bem, parece que foi uma boa ideia adicionar um passo para a verificação de integrade, né? É importante verificar a integridade do token senão um atacante poderia simplesmente manipular os dados do token e “autenticar” na conta de outro usuário sem precisar realmente passar pelo processo de autenticação.

Mas do que adianta verificar a integridade se o atacante também puder adulterar a hash? Sendo uma hash SHA-256 comum, o atacante pode simplesmenter alterar os dados do token e atualizar a hash para os novos dados. Com isso, os dados seriam considerados “íntegros” pela aplicação.

Para uma verificação de integridades segura, é importante usar um algoritmo Hash-Based Message Authentication Codes (HMAC) que faz a hash dos dados com um segredo (uma chave). Assim, é impossível um atacante conseguir adulterar a hash sem o conhecimento do segredo usado para gerar aquela hash.

Sem o segredo correto, a hash gerada será diferente da esperada pela aplicação. Assim os dados seriam considerados adulterados.