¿Cómo debe usar una API la autenticación básica http?

17

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?

Paul Sylling
fuente
Tenga en cuenta que las cookies no son parte del protocolo HTTP, y son simplemente una característica común del navegador. Entonces, si no está implementando para la web, olvídese de ellos.
Yam Marcovic
Si no se recomiendan las cookies, ¿cómo / dónde almacena los créditos para pasar a la API?
Paul Sylling
Las cookies son solo una forma para que los usuarios del navegador almacenen sin problemas tokens de sesión. Si está interactuando con un desarrollador, esto no necesita ser perfecto. Puede configurar un servicio de conexión pública que otorgue "tickets", y los desarrolladores pueden guardar sus tickets en la memoria o donde quieran. Tenga en cuenta que no tengo experiencia práctica en servicios web y probablemente haya soluciones estándar para este tipo de cosas.
Yam Marcovic
¿Qué piensas de mi pregunta sobre la autenticación de usuario final y la autenticación de API? Todavía no estoy seguro de esto
Paul Sylling

Respuestas:

7

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.

Nathan Pilling
fuente
2
¿Puedes dar un ejemplo de esto? Es lo que necesito, justo ahora muy pegado ...
gansos
0

¿Puede funcionar OAuth / OpenID, junto con token / secret?

Recientemente contemplé el siguiente escenario:

  • Aplicación web front-end
  • API REST subyacente
  • Aplicaciones de dispositivos móviles, acceso a la API REST

Como prueba simple, pude:

  • Autenticar usuarios a través de la aplicación web usando OAuth
  • La API REST autorizada a través de OAuth, lo que genera un secreto que se genera y se devuelve al cliente
  • El dispositivo móvil se autenticaría a través de OAuth y luego sería autorizado por la API REST a través del secreto

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.

Brendan Green
fuente
1
Entonces, en su ejemplo, solo el usuario se está autenticando. Los clientes en los que realiza las llamadas a la API (aplicación web, aplicación móvil) no están autenticando quiénes son. Teóricamente, la API es pública y cualquier aplicación podría publicar un nombre de usuario y contraseña y posiblemente recuperar un token
Paul Sylling,
El usuario se autentica a través de la aplicación, y la aplicación realiza las llamadas en nombre del usuario. El proceso de autenticación deriva el token, que luego pasa la aplicación.
Brendan Green