Estoy creando 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 luego quiere crear un tema del foro. ¿Cómo sabré que el usuario ya inició sesión?
Authorization
encabezado + por ejemplo, navegador local, almacenamiento VSCookie
encabezado + almacenamiento estándar de cookies del navegador.Respuestas:
Puede usar HTTP Basic o Digest Authentication. Puede autenticar de forma segura a los usuarios utilizando SSL en la parte superior, sin embargo, ralentiza un poco la API.
OAuth es lo mejor que puede obtener. Las ventajas que ofrece oAuth es un token revocable o expirable. Consulte lo siguiente sobre cómo implementar: Enlace de trabajo de los comentarios: https://www.ida.liu.se/~TDP024/labs/hmacarticle.pdf
fuente
Por ejemplo, cuando un usuario ha iniciado sesión. Ahora digamos que el usuario desea crear un tema del foro, ¿Cómo sabré que el usuario ya ha iniciado sesión?
Piénselo: debe haber algún apretón de manos que le indique a su API "Crear foro" que esta solicitud actual es de un usuario autenticado. Dado que las API REST generalmente no tienen estado, el estado debe persistir en alguna parte . Su cliente que consume las API REST es responsable de mantener ese estado. Por lo general, tiene la forma de un 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 codificación personalizada. Una vez que haya integrado su biblioteca favorita (uso Apache Shiro, por cierto), puede hacer lo siguiente:
/api/v1/login
yapi/v1/logout
JSESSIONID
) que se envía de vuelta al cliente (web, móvil, lo que sea)/api/v1/findUser
Eso es todo. Espero que esto ayude.
fuente
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.
Para obtener el token de sesión temporal anterior, proporcione una función de API (por ejemplo:)
http://mycompany.com/apiv1/login
que toma el nombre de usuario maestro y la contraseña maestra como entrada, crea un nombre de usuario / contraseña de autenticación básica HTTP temporal en el lado del servidor y devuelve el token (por ejemplo: Ym9ic2Vzc2lvbjE6czNjcmV0). Este nombre de usuario / contraseña debe ser temporal, debe expirar después de 20 minutos más o menos.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 Spring Security proporciona un buen soporte para implementar el método anterior
fuente
Creo que el mejor enfoque es usar OAuth2. Búscalo en Google y encontrarás muchas publicaciones útiles para ayudarte a configurarlo.
Será más fácil desarrollar aplicaciones cliente para su API desde una aplicación web o una móvil.
Espero que te ayude.
fuente
He estado usando la autenticación JWT. Funciona bien en mi aplicación.
Hay un método de autenticación que requerirá las credenciales del usuario. Este método valida las credenciales y devuelve un token de acceso en caso de éxito.
Este token debe enviarse a cualquier otro método en mi API web en el encabezado de la solicitud.
Es bastante fácil de implementar y muy fácil de probar.
fuente