¿Cómo se pueden asegurar las llamadas API con AngularJS?

Así es como lo hicimos para una aplicación que requería llamadas API seguras.

Cuando un usuario ingresa sus credenciales para iniciar sesión en su aplicación, y usted las envía de vuelta al servidor, genere una clave para este usuario utilizando estas credenciales o algún otro método para la generación de claves. Envíe esa clave al cliente. Esta clave debe almacenarse en una fábrica o servicio angular, lo que le convenga. También puede usar el almacenamiento local o el almacenamiento de sesiones. Ahora, cada vez que se realiza una llamada API, envíe esta clave con la llamada como parámetro POST. También puede usar un secreto compartido para cifrar la clave. El servidor responderá solo si la clave es válida o arroja un error, que se puede mostrar en el cliente.

También puede usar la autenticación basada en JWT. Usted forma una clave en el formato especificado por JWT y la envía al cliente. Se puede usar un secreto compartido para extraer el token y guardarlo igual que el anterior. Use este token en cada solicitud. La ventaja de usar JWT es que puede enviar parámetros adicionales para identificar al usuario en la clave.

Por seguridad, use HTTPS para todas sus comunicaciones. Y evite las solicitudes GET para la mayoría de las solicitudes. Use POST. He visto algún sitio validar a través de una solicitud de consulta GET. No hagas esto por favor.

Si realmente quiere decir autorización y sesión. Luego use JWT (token web JSON). Y evite almacenar el token en el almacenamiento local del almacenamiento de la sesión. Almacenar como galleta. La cookie es solo http y exclusiva de cada dominio. Por lo tanto, no necesita agregar algún token a todas sus solicitudes.

HTTPS es sin duda una buena medida de seguridad, he visto algunas respuestas que defienden la publicación, pero no estoy seguro de por qué. Además, las cookies no son una buena solución, ya que impone la autenticación implícita cuando los navegadores pasan las cookies de token de autenticación para realizar una solicitud a un dominio emparejado que no es una solución segura y que se debe desalentar. Sin embargo, hay algunas formas más seguras de usar cookies, donde las múltiples claves se combinan para verificar las falsificaciones.

Una mejor solución para reemplazar las cookies son los tokens de portador que son autenticación explícita y se pueden usar de una manera mucho más segura.

NO necesita hacer nada en angular.

Debe agregar un mecanismo de seguridad en el lado del servidor. Puede agregar credenciales (nombre de usuario-contraseña) o autenticación basada en token para las llamadas a la API.

por ej. Supongamos que tiene una API para obtener algunos datos para id = 54

http://www.example.com/api/getdata/?id=54&user=sangram&pass= {contraseña cifrada}

Puede verificar el nombre de usuario y la contraseña en el lado del servidor y devolver el resultado respectivo: solicitud correcta / incorrecta / Error, etc. Puede enviar una contraseña cifrada que se puede cifrar en el servidor para autenticarlo.

AngularJS no tiene que hacerlo.

El servidor tiene que hacerlo.

Es simple usar auth0.