¿Qué es la autenticación basada en token?

Respuestas:

544

Creo que está bien explicado aquí , citando solo las oraciones clave del artículo largo:

El concepto general detrás de un sistema de autenticación basado en token es simple. Permita que los usuarios ingresen su nombre de usuario y contraseña para obtener un token que les permita obtener un recurso específico, sin usar su nombre de usuario y contraseña. Una vez que se ha obtenido su token, el usuario puede ofrecer el token, que ofrece acceso a un recurso específico durante un período de tiempo, al sitio remoto.

En otras palabras: agregue un nivel de indirección para la autenticación: en lugar de tener que autenticarse con nombre de usuario y contraseña para cada recurso protegido, el usuario se autentica de esa manera una vez (dentro de una sesión de duración limitada), obtiene un token de tiempo limitado a cambio , y usa ese token para una mayor autenticación durante la sesión.

Las ventajas son muchas: por ejemplo, el usuario podría pasar el token, una vez que lo haya obtenido, a otro sistema automatizado en el que esté dispuesto a confiar por un tiempo limitado y un conjunto limitado de recursos, pero no estaría dispuesto confiar con su nombre de usuario y contraseña (es decir, con cada recurso al que se les permite acceder, para siempre o al menos hasta que cambien su contraseña).

Si algo aún no está claro, edite su pregunta para aclarar QUÉ no es 100% claro para usted, y estoy seguro de que podemos ayudarlo más.

Alex Martelli
fuente
66
¿Estoy en lo cierto al pensar que en una aplicación web, una (o más) cookies del sitio web remoto realiza la función del token?
AJP
29
Como los tokens se almacenan como cookies, ¿hay algo en el lugar para evitar que una persona robe esa cookie / token y la use ellos mismos, engañando al servidor para que piense que es el usuario autorizado? Obviamente, solo podían usarlo por x cantidad de tiempo, pero durante ese período podían hacer todo el daño que necesitaban.
BenM
40
¿Cómo es esto diferente de la Autenticación de sesión, donde el usuario puede obtener un session_id ingresando su nombre de usuario y contraseña, y luego usa este session_id en una solicitud posterior?
Saurabh Verma
44
Si el token caduca, ¿tiene que volver a iniciar sesión el usuario para obtener un nuevo token?
Anthony Al
12
@SaurabhVerma es diferente de una sesión porque no tiene que almacenar la información en una cookie. Eso es excelente para dispositivos móviles, algunos de los cuales tienen restricciones en el uso de cookies.
Kebman
182

De Auth0.com

La autenticación basada en tokens se basa en un token firmado que se envía al servidor en cada solicitud.

¿Cuáles son los beneficios de usar un enfoque basado en tokens?

  • Cross-domain / CORS: las cookies + CORS no funcionan bien en diferentes dominios. Un enfoque basado en tokens le permite realizar llamadas AJAX a cualquier servidor, en cualquier dominio, ya que utiliza un encabezado HTTP para transmitir la información del usuario.

  • Sin estado (también conocido como escalabilidad del lado del servidor): no es necesario mantener un almacén de sesión, el token es una entidad autónoma que transmite toda la información del usuario. El resto del estado vive en cookies o almacenamiento local en el lado del cliente.

  • CDN: puede servir todos los activos de su aplicación desde una CDN (por ejemplo, JavaScript, HTML, imágenes, etc.), y su lado del servidor es solo la API.

  • Desacoplamiento: no está vinculado a ningún esquema de autenticación en particular. El token se puede generar en cualquier lugar, por lo tanto, se puede llamar a su API desde cualquier lugar con una única forma de autenticar esas llamadas.

  • Listo para dispositivos móviles: cuando comienza a trabajar en una plataforma nativa (iOS, Android, Windows 8, etc.) las cookies no son ideales cuando el consumo de un enfoque basado en tokens simplifica mucho esto.

  • CSRF: dado que no depende de las cookies, no necesita protegerse contra las solicitudes de sitios cruzados (por ejemplo, no sería posible bloquear su sitio, generar una solicitud POST y reutilizar la cookie de autenticación existente porque no habrá ninguna )

  • Rendimiento: no presentamos ningún punto de referencia de rendimiento duro aquí, pero es probable que un viaje de ida y vuelta en la red (por ejemplo, encontrar una sesión en la base de datos) tome más tiempo que calcular un HMACSHA256 para validar un token y analizar su contenido.

Asik
fuente
66
@Asik Todos los puntos aquí son válidos, excepto "Sin estado" cuando comience a lidiar con la revocación de tokens, las listas negras, la prevención de ataques, etc.
svlada
El sitio citado recomienda un artículo más nuevo sobre el mismo tema: auth0.com/blog/cookies-vs-tokens-definitive-guide
ASalazar
2
Es posible que desee leer "Dejar de usar JWT para las sesiones": cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions
Juraj Martinka
1
Asik, ¿Qué tal la validez del token y cuándo expirará? Si agrega esa información, sería bueno.
Arun Prakash
2
El enlace ahora está roto.
Vista elíptica
95

A tokenes un dato que solo Server Xpodría haberse creado y que contiene suficientes datos para identificar a un usuario en particular.

Puede presentar su información de inicio de sesión y solicitar Server Xun token; y luego puede presentar su tokeny solicitar Server Xrealizar alguna acción específica del usuario.

TokenLos s se crean utilizando diversas combinaciones de diversas técnicas del campo de la criptografía, así como con aportes del campo más amplio de la investigación de seguridad. Si decides ir y crear tu propio tokensistema, será mejor que seas realmente inteligente.

Yfeldblum
fuente
44
En general, si desea autenticación basada en token, debe comenzar con OAuth.
Bob Aman el
66
OAuth es ciertamente viable en una aplicación basada en la web. Pero, por ejemplo, las sesiones de inicio de sesión del sistema operativo también usan sistemas de tokens, al igual que muchos otros tipos de programas de software, por lo que esta idea no se limita a la Web.
yfeldblum
1
Un token probablemente también sea preferible para un sistema de atención al cliente no público. La compañía controla el nombre de usuario / contraseña y emite y controla el token.
KevinManx
chrs, pero ¿en qué se diferencia este sistema de un sistema basado en sesión?
BKSpurgeon
@BKSpurgeon: los tokens son una forma común de implementar sesiones autenticadas.
yfeldblum
40

Un token es un dato creado por el servidor y contiene información para identificar un usuario en particular y la validez del token. El token contendrá la información del usuario, así como un código de token especial que el usuario puede pasar al servidor con cada método que admita la autenticación, en lugar de pasar un nombre de usuario y contraseña directamente.

La autenticación basada en tokens es una técnica de seguridad que autentica a los usuarios que intentan iniciar sesión en un servidor, una red u otro sistema seguro, utilizando un token de seguridad proporcionado por el servidor.

Una autenticación es exitosa si un usuario puede demostrarle a un servidor que él o ella es un usuario válido al pasar un token de seguridad. El servicio valida el token de seguridad y procesa la solicitud del usuario.

Una vez que el token es validado por el servicio, se utiliza para establecer el contexto de seguridad para el cliente, de modo que el servicio pueda tomar decisiones de autorización o auditar la actividad para las sucesivas solicitudes de los usuarios.

visita la fuente

DeepakK
fuente
22

Basado en token (seguridad / autenticación)

significa que para que podamos demostrar que tenemos acceso, primero tenemos que recibir el token. En un escenario de la vida real, el token podría ser una tarjeta de acceso al edificio, podría ser la llave de la cerradura de su casa. Para que pueda recuperar una tarjeta llave para su oficina o la llave de su hogar, primero debe demostrar quién es usted y que, de hecho, tiene acceso a esa ficha. Puede ser algo tan simple como mostrarle a alguien su identificación o darle una contraseña secreta. Así que imagina que necesito tener acceso a mi oficina. Voy a la oficina de seguridad, les muestro mi identificación y me dan esta ficha, que me permite entrar al edificio. Ahora tengo acceso sin restricciones para hacer lo que quiera dentro del edificio, siempre que tenga mi ficha conmigo.

¿Cuál es el beneficio de la seguridad basada en tokens?

Si pensamos en la API insegura, lo que tuvimos que hacer en ese caso fue que teníamos que proporcionar nuestra contraseña para todo lo que queríamos hacer.

Imaginaque cada vez que ingresamos a una puerta de nuestra oficina, tenemos que darles a todos los que están sentados junto a la puerta nuestra contraseña. Eso sería bastante malo, porque eso significa que cualquier persona dentro de nuestra oficina podría tomar nuestra contraseña y hacerse pasar por nosotros, y eso es bastante malo. En cambio, lo que hacemos es recuperar el token, por supuesto, junto con la contraseña, pero lo recuperamos de una persona. Y luego podemos usar esta ficha donde queramos dentro del edificio. Por supuesto, si perdemos el token, tenemos el mismo problema que si alguien más supiera nuestra contraseña, pero eso nos lleva a cosas como cómo nos aseguramos de que si perdemos el token, podemos revocar el acceso, y tal vez el token no debería vivir más de 24 horas, por lo que al día siguiente en que venimos a la oficina, debemos mostrar nuestra identificación nuevamente. Pero aún así, solo hay una persona a la que le mostramos la identificación,

Ahmer Ali Ahsan
fuente
15

La pregunta es antigua y la tecnología ha avanzado, aquí está el estado actual:

JSON Web Token (JWT) es un estándar abierto basado en JSON (RFC 7519) para pasar reclamaciones entre las partes en el entorno de aplicaciones web. Los tokens están diseñados para ser compactos, seguros para URL y utilizables, especialmente en el contexto de inicio de sesión único (SSO) del navegador web.

https://en.wikipedia.org/wiki/JSON_Web_Token

Ray Hulha
fuente
1
No creo que JWT represente el estado actual de la tecnología para implementar la autenticación basada en token. Es solo una forma de implementarlo y con muchas fallas que elocuentemente se presentan en artículos como cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions
Sung Cho
3

Es solo hash que está asociado con el usuario en la base de datos o de alguna otra manera. Ese token se puede usar para autenticar y luego autorizar a un usuario a acceder a los contenidos de la aplicación. Para recuperar este token en el lado del cliente es necesario iniciar sesión. Después de iniciar sesión por primera vez, debe guardar el token recuperado, no cualquier otro dato como sesión, id de sesión porque aquí todo es token para acceder a otros recursos de la aplicación.

El token se utiliza para asegurar la autenticidad del usuario.

Hardik Patel
fuente
3

El enfoque más preferido hoy en día para asegurar los recursos de la API web es autenticar a los usuarios en el servidor de la API web utilizando el token firmado (que contiene suficiente información para identificar a un usuario en particular) que el cliente debe enviar al servidor con cada uno de ellos. cada solicitud Esto se llama enfoque de autenticación basada en tokens.

La autenticación basada en token funciona de la siguiente manera:

Un usuario ingresa el nombre y la contraseña en el cliente (cliente significa el navegador o dispositivos móviles, etc.).

El cliente luego envía estas credenciales (es decir, nombre de usuario y contraseña) al servidor de autorización.

Luego, el servidor de autorización autentica las credenciales del cliente (es decir, nombre de usuario y contraseña) y luego genera y devuelve un token de acceso. Este token de acceso contiene suficiente información para identificar a un usuario y también contiene el tiempo de vencimiento del token.

La aplicación cliente luego incluye el token de acceso en el encabezado de autorización de la solicitud HTTP para acceder a los recursos restringidos desde el servidor de recursos hasta que caduque el token.

El siguiente artículo muestra cómo implementar la autenticación basada en tokens en WEB API paso a paso.

https://dotnettutorials.net/lesson/token-based-authentication-web-api/

Pranaya Rout
fuente
-2

Cuando se registra para un nuevo sitio web, a menudo se le envía un correo electrónico para activar su cuenta. Ese correo electrónico generalmente contiene un enlace para hacer clic. Parte de ese enlace, contiene un token, el servidor conoce este token y puede asociarlo con su cuenta. El token generalmente tendría una fecha de vencimiento asociada, por lo que solo puede tener una hora para hacer clic en el enlace y activar su cuenta. Nada de esto sería posible con las cookies o las variables de sesión, ya que se desconoce qué dispositivo o navegador está utilizando el cliente para revisar los correos electrónicos.

usuario3094826
fuente
11
El token / enlace de una sola vez es un concepto diferente que la autenticación basada en token.
Emile Bergeron
El nombre de lo que dices también es token. Pero esa no es la pregunta
sajjad Yosefi