Autenticación con #JWT desde un #middleware con #Golang (explicado el refresh token)



Autenticación con #JWT desde un #middleware con #Golang (explicado el refresh token)

Autenticación con #JWT desde un #middleware con #Golang (explicado el refresh token)

En este video vemos un método de autenticación muy conocido y usado en la industria para arquitecturas web, basándose en tokens de usuario. Estos tokens reciben el nombre de JWT por la sigla JSON web token.
Consta de 3 partes, el header (información del algoritmo y tipo de token), el payload (donde están la información que el token contiene), y la firma o signature, que es quien la da validez y confiabilidad al token. Pueden leer sobre JWT acá https://jwt.io y acá en español https://es.wikipedia.org/wiki/JSON_Web_Token
La información “autocontenida del token la van a encontrar con el nombre de “claims”, estos claims vienen algunos por defecto (quiere decir que la librería de token, o la gran mayoría, ya los valida y usa) y también podemos agregar los que nuestro caso de uso o modelo de negocio nos crea mas conveniente.
Dentro de los claims por defecto, los mas comunes van a ser
* “iss”, de issuer, quien firmó el token,
* “exp”, cuando expira el token, expresado en epoch
* “sub”, subject, generalmente algo que identifica al portador del token
El expiration, es especialmente importante ya que nos dice cuando un JWT deja de ser válido, en ese momento, entra en juego el Refresh Token.
Usar el refresh token nos posibilita la negociación entre el cliente y el servidor, teniendo así una posibilidad de volver a entregar un token, aun cuando el presentado por el cliente este expirado. Pero si cuenta con un refresh token (también un JWT) válido, el servidor va a volver a entregar un nuevo JWT para las siguientes llamadas. Es decir, el usuario sigue “logueado”.

Toda la validación la hacemos con un middleware, que no es mas que una función en Golang que acepta una función, y devuelve otra función (dejo mi video de funciones por si algún concepto no queda claro). https://youtu.be/sW8GCUjfzr4

Github:
https://github.com/tomiok/golang-2020/tree/master/video-6
GitHub JWT:
https://github.com/dgrijalva/jwt-go

Comments are closed.