tutorial sistema parte español consumir con autenticación autenticacion rest authentication oauth asp.net-web-api

sistema - Autenticación básica con un token Guid para API REST en lugar de nombre de usuario/contraseña



sistema de autenticación api rest con laravel 5.6 — parte 1 (2)

Visión de conjunto

Estoy desarrollando una aplicación móvil usando PhoneGap con REST API para el back-end. La API REST no será utilizada por desarrolladores externos, sino que será específica de la aplicación, por lo que no es necesario implementar OAuth. Por lo tanto, estoy planeando usar Autenticación básica en la que el Usuario ingrese su nombre de usuario / contraseña para acceder a los recursos de la API. Todas las comunicaciones API estarán en SSL.

Autenticación básica con Token

En lugar de dejar que la aplicación almacene el nombre de usuario / contraseña y enviarla con cada solicitud a la API, prefiero autenticar el nombre de usuario / contraseña en la primera solicitud de inicio de sesión y enviar de regreso un token de GUID. El cliente almacena este token de GUID y envía el token de vuelta a la API con cada solicitud a través del encabezado Authorization, como este:

Autorización: básica e1d9753f-a508-46cc-a428-1787595d63e4

En el lado del servidor, la combinación de nombre de usuario / GUID se almacenará en el servidor con una fecha de vencimiento junto con la configuración del dispositivo. Esto permitirá hacer un seguimiento de la cantidad de dispositivos con los que un usuario ha iniciado sesión y caducará una vez que el Guid haya alcanzado su vencimiento.

¿Este enfoque parece razonable y seguro?


El enfoque general de "Autenticación con Token" es muy bueno, pero no debe intentar hacer que la Autenticación Básica funcione de forma diferente a lo que se supone (después de todo, es un estándar definido). Deberías usar tu propio encabezado para fines de autenticación. Puede encontrar una muy buena descripción de dicho escenario aquí:


No es necesario que cree encabezados personalizados o esquemas de autenticación en absoluto.

El esquema de autenticación de Bearer está diseñado exactamente para su caso de uso:

Authorization: Bearer e1d9753f-a508-46cc-a428-1787595d63e4

Basic autenticación Basic debe ser la siguiente:

Authorization: Basic base64EncodedUsernameAndPassword

donde base64EncodedUsernameAndPassword es igual a la salida de:

base_64_encode(username + '':'' + raw_password)

No use Basic si el valor del texto final no es el algoritmo exacto anterior.

Si solo desea poner el valor que desee después del nombre del esquema, use el esquema de Bearer : para eso fue inventado.

Advertencia

Si bien puedes usar un GUID / UUID simple como tu token, este no es realmente un token seguro. Considere usar un JWT lugar. Los JWT se pueden firmar digitalmente y se les asigna un TTL para que solo el servidor pueda: a) crearlo y validar su autenticidad, yb) asegurarse de que no se use por más tiempo de lo permitido. Si bien esto puede ser cierto para los datos almacenados en base al GUID, el enfoque JWT no requiere el estado del servidor, por lo que escalará mucho mejor, y logra lo mismo.