A especificação JWT descreve apenas a carga útil e como ela é enviada, mas deixa o protocolo de autenticação aberto, o que permite a flexibilidade, mas, infelizmente, a flexibilidade pode levar a antipadrões e erros de design.
Estou procurando um padrão empresarial bem pensado e testado para autenticação JWT, que eu poderia usar ou adaptar, mas não encontrei algo completo.
O que eu estava pensando é:
- quando nenhum cabeçalho de Autorização for atendido ou o token JWT for inválido ou expirar, envie HTTP 401
- para autenticar, use / faça login no canal REST, envie nome de usuário e senha como objeto JSON
- para manter o token ativo, use / mantenha o canal REST ativo, chame-o a cada N (5) minutos, receba um novo token JWT e substitua o existente após cada chamada (o token expira após M (15) minutos)
No entanto, o que me perturba é a necessidade desse canal / keepalive. Por outro lado, me obriga a impedir que a autenticação expire, mesmo se o usuário estiver ausente (a decisão, se desejarmos manter a vida ainda não foi cumprida) e, é claro, essas são chamadas extras e complicações adicionais ao protocolo. O que seria interessante, é que o servidor prolonga automaticamente o token. No ambiente baseado em sessão, isso ocorre redefinindo o registro de data e hora; no entanto, aqui, o servidor precisará enviar um novo token, talvez não a cada vez, mas assim que o token expirar em R (por exemplo, 10) minutos. Mas colocá-lo no corpo da resposta significaria modificar o protocolo de resposta JSON (portanto, a solução é invasiva e não transparente) e colocar um cabeçalho HTTP extra que o cliente pudesse processar não seria necessariamente um bom padrão. EU'
Existem padrões empresariais prontos que respondam aos meus pontos em aberto? O rascunho do meu protocolo é uma ideia confiável? Eu preferiria usar algo pronto do que projetar do zero.