Autenticación a través de tokens

8

Soy relativamente nuevo en jwt.io y autenticación y estoy usando JWT.io de la siguiente manera.

Lado del servidor

Una vez que el usuario inicia sesión, genero un token useridincrustado en el interior y se lo devuelvo al usuario en el cuerpo del mensaje

Client Side Browser / JS Estoy almacenando el token en localStorage y para cada solicitud posterior, paso el token en los encabezados.

Authorization: Basic someEncryptedValue

También he usado

X-Auth-Token: someEncryptedValue

¿Podría usar esto en una cookie?

Luego, en el lado del servidor, verifico el token contra el secreto, verifico el vencimiento, obtengo la identificación del token y luego atiendo la solicitud.

¿Está todo correcto en este flujo de trabajo?

usuario2727195
fuente
¿Alguna razón para no seguir un estándar como OAuth2? Por cierto: no debe pasar el token como encabezado de autenticación básico, en su lugar use Autorización: Portador
Arne Burmeister
Portador sí es el más adecuado, OAuth2 es que supongo que es para los usuarios se autentican mediante 3 partes como Google, Facebook, etc, mientras que este es mi propio esquema de autenticación de contraseña de usuario en contra, por favor me ilumine más si estoy equivocado
user2727195
1
La autenticación de terceros es solo una característica de OAuth, funciona perfectamente con JWT y un servidor de autenticación propio
Arne Burmeister
ok, por favor
ilumíneme
2
No es necesario oAuth a menos que necesite aplicaciones que compartan información entre ellos. Para una función tan básica como la autenticación, Jwt es suficiente.
Laiv

Respuestas:

1

Su flujo de trabajo es correcto (suponiendo que esté usando HTTPS), y sí, podría almacenar su token en una Cookie en lugar de pasarlo al encabezado de autorización.

No recomiendo usar OAuth2. Implementar incluso el flujo más simple correctamente agregaría un montón de complejidad a su proceso de inicio de sesión, y me parece que no lo necesita ya que sus partes del "lado del servidor" viven en el mismo dominio.

Si fuera yo, usaría cookies. Seguir esquemas bien entendidos deja menos oportunidades de confusión y significa que el navegador se encarga de enviar y actualizar su cookie (por ejemplo, considere cómo podría manejar las sesiones con un tiempo de espera inactivo)

Justin
fuente
1
¿Has considerado las diferencias entre un ataque XSS y CSRF? Respetuosamente, sugiero que el uso de cookies solo puede generar una vulnerabilidad CSRF que es más fácil de explotar que un ataque de estilo XSS, mientras que una autenticación basada en token, aunque aún vulnerable, es más difícil de explotar. De cualquier manera, para protegerse absolutamente contra ambos tipos de ataque, necesita tanto la cookie como el token de encabezado presente en la solicitud para considerar de forma segura al usuario autenticado y autorizado.
RibaldEddie
@RibaldEddie No, no lo había hecho, supongo que supuse que se usaría algún otro mecanismo para prevenir la CSRF. ¿Alguna posibilidad de que puedas entrar en más detalles? ¿Cómo sigue siendo vulnerable la autenticación basada en token? ¿Y cómo el uso de ambos métodos protege contra CSRF?
Justin
El patrón de token cifrado es una solución. Así es la cookie de doble envío. Ambos necesitan otro valor enviado con la solicitud cuando se usan cookies para pasar las credenciales.
RibaldEddie
0

Una buena lectura Habla sobre guardar tokens en el almacenamiento local y luego enviarlos de vuelta a través de JavaScript en la solicitud http.

: https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage

usuario2727195
fuente
66
Por favor, no solo enlace a sitios web externos para evitar la descomposición del enlace. Si el artículo contiene información valiosa, proporcione un resumen del artículo y publíquelo aquí.
Andy
1
Hay mucha información valiosa allí, un resumen de los puntos altos sería bueno (como aprovechar la firma JWT, usar cookies y algunos otros pasos).
Berin Loritsch
0

Todos los navegadores ahora admiten Digest Auth, que es seguro incluso a través de HTTP. Dependiendo de sus requisitos exactos, esto puede ser suficiente.

Hugh Morris
fuente