Pregunta
· 9 feb, 2023

Implementar autenticación basica en una API Rest

Recientemente hemos empezado a utilizar Restforms2 para crear una API CRUD para un proyecto. Sin embargo hay algunas funcionalidades para las que no nos es suficiente. Para suplir esto, hemos creado una producción con un WS Rest que maneja las peticiones más complejas. Esto funciona muy bien, pero tenemos un problema, no tiene autenticación

Para evitar tener dos sistemas de autenticación diferentes para lo que esencialmente van a ser dos partes de una misma api me gustaría poder emplear los usuarios y contraseñas del propio iris, igual que hace Restforms2 al utilizar la autenticación de las páginas CSP.

Buscando soluciones a esto en la comunidad, encontré un post en el que se empleaba la funcion $SYSTEM.Security.Login(user, pass) para comprobar el exito en el login y generar tokens de autenticación. Esto funciona perfectamente si utilizas una cuenta con ciertos permisos... mas o menos. Este método cambia el usuario con el que se ejecuta el código de la producción. Así que si utilizas un usuario con permisos reducidos, puede que la siguiente llamada a la api falle, porque no puede ejecutar parte del código. 

¿Hay algun método similar a $SYSTEM.Security.Login(user, pass) que solo compruebe si el usuario y contraseña son correctos pero no cambie el usuario? O alguna otra solución a este problema. 

Gracias

Comentarios (1)1
Inicie sesión o regístrese para continuar

¡Buenas Jaime!

Puedes configurar tu aplicación web desde la edición de las aplicaciones web para que funcione con autorización por password. (System > Security Management > Web Applications)

A continuación deberás acceder a la pestaña de Application roles y asignar los roles que consideres necesarios para el usuario que se ha logueado con éxito en la aplicación. Esto le asignará dichos roles únicamente en el contexto de la invocación del servicio web, es decir, fuera de ese acceso el usuario seguirá con sus roles habituales.

Con esta configuración el último paso será enviar el usuario y la contraseña en la cabecera de tu invocación REST como un tipo de autentificación Basic (o bien pasar por URL los parámetros ?CacheUserName=username&CachePassword=password), en ambos casos sería recomendable que la invocación se haga usando https para evitar exponer el usuario y la contraseña abiertamente.

De esta forma tendrás una validación de los datos del usuario y la asignación de los roles necesarios dentro del contexto de la invocación del servicio web.