Autenticación de API REST

Estoy construyendo una aplicación que se alojará en un servidor. Quiero crear una API para la aplicación para facilitar la interacción desde cualquier plataforma (aplicación web, aplicación móvil). Lo que no entiendo es que cuando utilizo la API REST, ¿cómo autenticamos al usuario?

Por ejemplo, cuando un usuario ha iniciado sesión y quiere crear un tema en el foro. ¿Cómo sabré que el usuario ya inició sesión?

Puede usar HTTP Basic o Digest Authentication. Puede autenticar de forma segura a los usuarios que usan SSL en la parte superior, sin embargo, ralentiza un poco la API.

  • Autenticación básica: utiliza la encoding Base64 en nombre de usuario y contraseña
  • Autenticación implícita: codifica el nombre de usuario y la contraseña antes de enviarlos a través de la red.

OAuth es lo mejor que puede obtener. Las ventajas que ofrece OAuth es un token expirable o expirable. Consulte a continuación sobre cómo implementar: Enlace de trabajo a partir de comentarios: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf

Por ejemplo, cuando un usuario tiene sesión. Ahora digamos que el usuario desea crear un tema en el foro, ¿cómo sabré que el usuario ya ha iniciado sesión?

Piénselo: debe haber un apretón de manos que indique a su API “Crear foro” que esta solicitud actual proviene de un usuario autenticado. Como las API REST generalmente son sin estado, el estado debe persistir en algún lugar . Su cliente que consume las API REST es responsable de mantener ese estado. Por lo general, es en forma de token que se pasa desde el momento en que el usuario inició sesión. Si el token es bueno, su solicitud es buena.

Compruebe cómo Amazon AWS realiza las autenticaciones. Ese es un ejemplo perfecto de “pasar el dinero” de una API a otra.

* Pensé en agregar alguna respuesta práctica a mi respuesta anterior. Pruebe Apache Shiro (o cualquier biblioteca de autenticación / autorización). En pocas palabras, intente y evite la encoding personalizada. Una vez que haya integrado su biblioteca favorita (uso Apache Shiro, por cierto), puede hacer lo siguiente:

  1. Cree una API de inicio de sesión / cierre de sesión como: /api/v1/login y api/v1/logout
  2. En estas API de inicio de sesión y cierre de sesión, realice la autenticación con su tienda de usuario
  3. El resultado es un token (generalmente, JSESSIONID ) que se envía de vuelta al cliente (web, móvil, lo que sea)
  4. A partir de este punto, todas las llamadas posteriores realizadas por su cliente incluirán este token
  5. Supongamos que su próxima llamada se realiza a una API llamada /api/v1/findUser
  6. Lo primero que hará este código de API es verificar el token (“¿este usuario está autenticado?”)
  7. Si la respuesta vuelve a ser NO, devuelve un estado HTTP 401 al cliente. Déjelos manejarlo.
  8. Si la respuesta es SÍ, proceda a devolver el Usuario solicitado

Eso es todo. Espero que esto ayude.

  1. Use HTTP Basic Auth para autenticar clientes, pero trate el nombre de usuario / contraseña solo como un token de sesión temporal .

    El token de sesión es solo un encabezado adjunto a cada solicitud HTTP, por ejemplo: Authorization: Basic Ym9ic2Vzc2lvbjE6czNjcmV0

    La cadena Ym9ic2Vzc2lvbjE6czNjcmV0 anterior es solo la cadena “bobsession1: s3cret” (que es un nombre de usuario / contraseña) codificada en Base64.

  2. Para obtener el token de sesión temporal anterior, proporcione una función de API (p. Ej .: http://mycompany.com/apiv1/login ) que tome master-username y master-password como entrada, cree un nombre de usuario / contraseña HTTP Auth Authentic en el lado del servidor, y devuelve el token (p. ej .: Ym9ic2Vzc2lvbjE6czNjcmV0). Este nombre de usuario / contraseña debe ser temporal, debe caducar después de aproximadamente 20 minutos.

  3. Para mayor seguridad, asegúrese de que su servicio REST se sirva a través de HTTPS para que la información no se transfiera en texto sin formato

Si está en Java, la biblioteca de Spring Security proporciona un buen soporte para implementar el método anterior

Creo que el mejor enfoque es usar OAuth2. Google y encontrará muchas publicaciones útiles para ayudarlo a configurarlo.

Facilitará el desarrollo de aplicaciones cliente para su API desde una aplicación web o móvil.

Espero que te ayude