Estou criando um aplicativo móvel e estou usando o JWT para autenticação.
Parece que a melhor maneira de fazer isso é emparelhar o token de acesso JWT com um token de atualização, para que eu possa expirar o token de acesso com a frequência que desejar.
- Como é um token de atualização? É uma string aleatória? Essa cadeia é criptografada? É outro JWT?
- O token de atualização seria armazenado no banco de dados no modelo de usuário para acesso, correto? Parece que deve ser criptografado neste caso
- Eu enviava o token de atualização de volta após o login do usuário e depois o cliente acessava uma rota separada para recuperar um token de acesso?
security
authentication
oauth-2.0
jwt
jtmarmon
fonte
fonte
Respostas:
Supondo que se trata do OAuth 2.0, pois trata-se de JWTs e tokens de atualização ...:
Assim como um token de acesso, em princípio um token de atualização pode ser qualquer coisa, incluindo todas as opções que você descreve; uma JWT pode ser usada quando o Servidor de Autorização deseja não ter estado ou deseja impor algum tipo de semântica de "prova de posse" ao cliente que a apresenta; observe que um token de atualização difere de um token de acesso, pois ele não é apresentado a um servidor de recursos, mas apenas ao servidor de autorização que o emitiu em primeiro lugar; portanto, a otimização de validação independente para JWTs como tokens de acesso não segure para tokens de atualização
isso depende da segurança / acesso do banco de dados; se o banco de dados puder ser acessado por outras partes / servidores / aplicativos / usuários, então sim (mas sua milhagem pode variar de acordo com onde e como você armazena a chave de criptografia ...)
um Servidor de Autorização pode emitir tokens de acesso e tokens de atualização ao mesmo tempo, dependendo da concessão usada pelo cliente para obtê-los; a especificação contém os detalhes e as opções de cada um dos subsídios padronizados
fonte
Abaixo estão as etapas para revogar seu token de acesso JWT:
Informe-me se precisar de mais detalhes. Também posso compartilhar o código (inicialização Java + Spring).
Para suas perguntas:
Q1: é outro JWT com menos solicitações feitas com longo prazo de validade.
P2: Não estará em um banco de dados. O back-end não será armazenado em nenhum lugar. Eles apenas descriptografam o token com chave privada / pública e o validam com seu tempo de expiração também.
Q3: Sim, correto
fonte
localStorage
e orefreshToken
deve ser armazenado em um arquivohttpOnly
. OrefreshToekn
pode ser usado para obter um novo JWT, portanto ele deve ser manuseado com cuidado extra.Com base nesta implementação com o Node.js do JWT com token de atualização :
1) Nesse caso, eles usam um uid e não é um JWT. Quando eles atualizam o token, eles enviam o token de atualização e o usuário. Se você implementá-lo como um JWT, não precisará enviar o usuário, porque ele seria dentro do JWT.
2) Eles implementam isso em um documento separado (tabela). Faz sentido para mim porque um usuário pode fazer login em diferentes aplicativos clientes e pode ter um token de atualização por aplicativo. Se o usuário perder um dispositivo com um aplicativo instalado, o token de atualização desse dispositivo poderá ser invalidado sem afetar os outros dispositivos conectados.
3) Nesta implementação, ele responde ao método de logon com o token de acesso e o token de atualização. Parece correto para mim.
fonte
iat
com a janela) - reeditar um novo baseado no anteriorJWT
você quer terrefresh_token
dentro dela? Se assim for, OAuth RFC 6749 diz explicitamente para não enviarrefresh_token
para o servidor de recursos (eJWT
é enviado para os servidores de recursos): tools.ietf.org/html/rfc6749#section-1.5