Cuando una API requiere que un cliente se autentique en ella, he visto dos escenarios diferentes utilizados y me pregunto qué caso debería usar para mi situación.
Ejemplo 1. Una compañía ofrece una API para permitir que terceros se autentiquen con un token y un secreto utilizando HTTP Basic.
Ejemplo 2. Una API acepta un nombre de usuario y contraseña a través de HTTP Basic para autenticar a un usuario final. En general, reciben un token para futuras solicitudes.
Mi configuración: tendré una API JSON que usaré como back-end para una aplicación móvil y web. Parece una buena práctica que tanto la aplicación móvil como la web envíen un token y un secreto, por lo que solo estas dos aplicaciones pueden acceder a la API bloqueando a cualquier otro tercero.
Pero la aplicación móvil y web permite a los usuarios iniciar sesión y enviar publicaciones, ver sus datos, etc. Por lo tanto, me gustaría que también inicien sesión a través de HTTP Basic en cada solicitud.
¿De alguna manera uso una combinación de ambos métodos o solo envío las credenciales de usuario final (nombre de usuario y token) en cada solicitud? Si solo envío las credenciales de usuario final, ¿las almaceno en una cookie en el cliente?
fuente
Respuestas:
La autenticación básica HTTP requiere que se envíe el nombre de usuario y la contraseña con cada solicitud de recursos. El nombre de usuario: contraseña se pasa en la cadena codificada base64 del encabezado de solicitud de "Autorización" con el prefijo "Básico". Si toda su comunicación http está encriptada (a través de ssl), la información del encabezado de la Autorización no debería poder ser utilizada fácilmente por los atacantes, ya que es poco probable que puedan obtenerla.
HTTP cifrado SSL con autenticación básica debería ser suficiente.
fuente
¿Puede funcionar OAuth / OpenID, junto con token / secret?
Recientemente contemplé el siguiente escenario:
Como prueba simple, pude:
Esto permitiría que la aplicación del dispositivo móvil se autentique con las mismas credenciales que a través del front-end web (la misma cuenta) y también pueda autorizar el acceso a la API.
fuente