La mejor manera de implementar la autenticación para una API REST

21

Desarrollamos aplicaciones sociales para dispositivos móviles. Cada aplicación consume servicios web RESTful API. Cuando implemento el inicio de sesión, generalmente almaceno el nombre de usuario y la contraseña en algún lugar del dispositivo. Luego los envío y como respuesta obtengo acceso a mi perfil. Pero también sé que hay otra forma de hacer esto.

Uno de alguna manera genera un token con un algoritmo particular, y luego lo envía en lugar del nombre de usuario y contraseña para obtener acceso.

¿Cómo debo implementar eso? ¿Debo enviar este token junto con cualquier otra solicitud que no sea iniciar sesión?

Vladimir Stazhilov
fuente
11
Eso es autenticación , no autorización . Autenticación = demostrar que eres quien dices que eres. Autorización = demostrar que puede hacer lo que solicitó.
tdammers
¡Solo iba a agregar el mismo comentario a las respuestas! +1 a ustedes @tdammers He editado todos los contenidos para que la autorización de Google no los traiga aquí
Shiplu Mokaddim

Respuestas:

14

Hay varias formas de implementar la autenticación en el contexto RESTful, y es más seguro enviar solo tokens en lugar de inicio de sesión / contraseña: podría hacer que los tokens no sean válidos por tiempo de espera o por algún otro criterio, y pedirle al usuario que vuelva a autenticarse .

Por ejemplo, solicitudes de REST de autenticación utilizando HMAC . En este enfoque, el cliente tendrá claves públicas y secretas . Para todas las solicitudes que requieren autenticación , debe agregar la clave de publicación y usar la clave secreta para calcular el hash de su solicitud

var myRequest = "https://myserver/resource?publicId=12345&param=value";
var requestHash = hmac_implementation(myRequest);
myRequest = myRequest + '&hmac=' + requestHash;

Ahora el servidor podría identificar la solicitud por clave pública y calcular requestHash . Si ambos hashes son iguales, el usuario está autorizado.

Por cierto, también debe usar https para asegurar la comunicación a través de una red informática; esto reducirá drásticamente la cantidad de posibles problemas.

Akim
fuente