O token web json parece ser uma boa maneira de proteger apis de servidor de acesso não autorizado, mas um jwt requer uma chave secreta. E geralmente quem faz uma solicitação a um servidor é um navegador. E um navegador não pode armazenar uma chave secreta, porque ela seria visível no HTML.
Então a única opção que resta é usar a senha inserida pelo usuário, armazená-la em uma variável e usá-la como uma chave secreta para solicitações subsequentes. O problema é que no servidor as chaves secretas precisam corresponder, então eu tenho que:
- armazenar o pw em texto limpo. Não é bom por razões óbvias.
- armazene o pw como hash, e faça o hash no cliente antes de passá-lo como chave secreta para criar o token. Não é tão bom também, porque agora qualquer um conhece o método de hash
Ou estou esquecendo de algo? Existe uma maneira melhor de fazer isso?
O JWT deve ser criado no servidor e enviado ao cliente (normalmente em resposta ao cliente enviando um nome de usuário e senha ao servidor usando HTTPS).
O cliente nunca precisa saber a chave secreta.
A chave secreta do servidor, portanto, não precisa corresponder a nada além dela mesma.