WS para validación de usuarios

Buenos días, quiera saber si existe algun ejemplo en el foro para validar usuario/pass mediante un Web Service. No logro encontrar alguno, la idea es poner dentro de mi proyecto un Web Service que provea validación de Usuarios para aplicaciones externas utilizando los datos almacenados con toba_usuarios.

Hola Nicolas,

en rigor ejemplos no hay, de todas maneras… no deberia ser muy dificil de crear el mismo, aunque hay algunas complicaciones que se me ocurren:

  1. Todos los sistemas deberian usar la autenticacion toba… siempre, ya que los datos los saca de la base de toba. Perderias la posibilidad de usar CAS o algun otro login centralizado que se base en SAML 2.0, quizas te convenga ir por este camino y tener un IdP al que se enlacen las aplicaciones.

  2. Ningun proyecto deberia tener los datos de autenticacion en su base de negocio, ya que eso implicaria que debes cargar la subclase de toba_usuario correspondiente dentro del WS.

  3. Tendrias que ver como reaccionar ante los distintos status, ya que la semantica basica de REST no se si te alcance, por ahi podes extenderla… .pero tenes que dejarlo bien documentado en algun lado.

  4. Finalmente, esta la cuestion de quien puede o no acceder a ese WS… es publico? cualquiera puede hacerle pedidos? se van a hacer via https?, tenelo en cuenta para evitar DOS.

Saludos

El WS no es público, se accede mediante usuario/contraseña.
La idea es que el método GET del WS tenga algo asi:

if(toba_usuario_basico::autenticar($usr,$pass)){
$resultado=array(‘resultado’=>‘true’);
}else{
$resultado=array(‘resultado’=>‘false’);
}

 /**Se escribe la respuesta*/
    rest::response()->get($resultado);

El tema es que no se como terminar de cerrarlo y como debo pasar la pwd como parametro ya que solo tengo $usr como el ID de GET y la contraseña debería ir como @param_query y en caso de que la contraseña viaje como texto plano quedería muy inseguro.

Hola Nicolas,

Por publico me referia a que se puede acceder desde fuera de la institucion la URL, onda que un Chino con mucho tiempo de gusto se tiente con un DOS y te lo voltee.

La idea es que el método GET del WS tenga algo asi:

if(toba_usuario_basico::autenticar($usr,$pass)){
$resultado=array(‘resultado’=>‘true’);
}else{
$resultado=array(‘resultado’=>‘false’);
}

 /**Se escribe la respuesta*/
    rest::response()->get($resultado);

El tema es que no se como terminar de cerrarlo y como debo pasar la pwd como parametro ya que solo tengo $usr como el ID de GET y la contraseña debería ir como @param_query y en caso de que la contraseña viaje como texto plano quedería muy inseguro.

Aca es donde usar HTTPS te hace toda la diferencia, xq la contraseña debe viajar plana o al menos con una encripcion simetrica que puedas sacar facilmente en el server antes de pasarlo al metodo que autentica, esa encripcion tampoco te va a proteger absolutamente ya que va a ser una clave compartida entre todas las aplicaciones, con que una se escape… se escapo para todas. Por lo que te diria que usar TLS en la conexion al WS es tu mejor opcion, despues si dentro la clave viaja encriptada… mejor…pero lo primero que tenes que asegurar es la capa de transporte.

Saludos

No logro entender que clase utilizar para validar los datos y como hacerlo. He logrado recuperar la contraseña de la tabla apex_usuario desde dentro del Recurso pero no se que funcion utilizar.

Hola Nico,

para la autenticacion se usan las clases alojadas en toba_dir/php/nucleo/lib/autenticacion, como minimo tendrias que utilizar toba_autenticacion_basica y de dicha manera obtenes si el usuario/pwd es valido o no, segun conste en la instancia de toba.

Tene en cuenta que esas clases fueron pensadas para utilizarse en otro circuito y por tanto pueden tener llamadas a otras partes de toba. Si te encontras con algun error medio raro, es que quizas algunas cosas las tengas que instanciar manualmente, ya que el circuito de REST no sigue exactamente el mismo camino.

Saludos

Exacto, así lo resolvimos, utilizando

$respuesta = toba_usuario_basico::autenticar($fila[‘usuario’],$pass);

El cliente del WS verifica $respuesta y con eso autoriza o no el ingreso a su sistema.
Una consulta mas, utilizando Toba 2.7.2 hay posibilidad de autenticación entre Cliente/Servidor del WS usando certificados?

Gracias. Felicidades.

Hola Nico,

te diria que no, como minimo creo que tenes que estar en la version 2.7.3 si mal no calcule las revisiones.

Saludos