[SOLUCIONADO]Error al solicitar título de Autogestión

Buen día estamos haciendo pruebas de la solicitud de títulos desde autogestión y nos genera el siguiente error:

*   Trying 10.1.5.31...
* TCP_NODELAY set
* Connected to 10.1.5.31 (10.1.5.31) port 80 (#0)
> GET /guarani/rest/status HTTP/1.1
> Host: 10.1.5.31
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 401 Unauthorized
< Date: Mon, 12 Sep 2022 14:10:53 GMT
< Server: Apache/2.4.29 (Ubuntu)
< API-Version: v1.0
< WWW-Authenticate: Basic realm="Usuario de la API"
< Content-Length: 49
< Content-Type: application/json
<
* Ignoring the response-body
* Connection #0 to host 10.1.5.31 left intact
* Issue another request to this URL: 'http://10.1.5.31/guarani/rest/status'
* Found bundle for host 10.1.5.31: 0x55e1cd5bcbd0 [can pipeline]
* Re-using existing connection! (#0) with host 10.1.5.31
* Connected to 10.1.5.31 (10.1.5.31) port 80 (#0)
* Server auth using Basic with user '3w'
> GET /guarani/rest/status HTTP/1.1
> Host: 10.1.5.31
> Authorization: Basic M3c6ZzN0ZXN0aW5n
> User-Agent: curl/7.58.0
> Accept: */*
>
< HTTP/1.1 403 Forbidden
< Date: Mon, 12 Sep 2022 14:10:53 GMT
< Server: Apache/2.4.29 (Ubuntu)
< API-Version: v1.0
< Content-Length: 90
< Content-Type: application/json
<
{
    "error": 403,
    "mensaje": "403 Forbidden",
    "descripcion": "Acceso denegado"
* Connection #0 to host 10.1.5.31 left intact

Viendo el siguiente hilo https://foro.comunidad.siu.edu.ar/index.php?topic=18208.30 se menciona que el usuario en el archivo recursos_usuarios.php debe estar bien configurado. Les pasamos el archivo para que nos comenten si el mismo se encuentra bien configurado.

Muchas gracias!


recursos_usuarios.rar (910 Bytes)

error.png

error.png

Hola Javier,

¿que versión de Guaraní tienen instalada?

Parece que al archivo instalacion/i__desarrollo/p__guarani/rest/recursos_usuarios.php le falta el return al final, revisa el template php/rest/recursos_usuarios_template.php.

return $recursos_usuarios;

Si estas en la versión 3.20.x revisa estos pasos: https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.20.0/API_REST_GUARANI

¿podes acceder a los servicios GET /info y GET /status, o te devuelve 403 también?

saludos.
2

Leo, perdón estamos en la versión 3.19.1.

El archivo php/rest/recursos_usuarios_template.php. no tiene un Return al final, me fije en el repositorio y no lo tiene, le estaría faltando eso???

En el path instalacion/i__desarrollo/p__guarani/rest/recursos_usuarios.php no tengo el archivo recurso_usuarios.php en ese path tengo el servidor_usuarios.ini

¿podes acceder a los servicios GET /info y GET /status, o te devuelve 403 también?
Perdón la ignorancia, pero como accedo a dichos servicios?

Saludos

Hola Javier, gracias por la información!!!

El archivo php/rest/recursos_usuarios_template.php. no tiene un Return al final, me fije en el repositorio y no lo tiene, le estaría faltando eso???
Esta bien, en la versión 3.19.1 no lleva [b]return[/b], lo podes ver en [url=https://colab.siu.edu.ar/trac/guarani3/browser/nodos/unt/gestion/trunk/3.19.1/php/rest/recursos_usuarios_template.php]php/rest/recursos_usuarios_template.php[/url].
En el path instalacion/i__desarrollo/p__guarani/rest/recursos_usuarios.php no tengo el archivo recurso_usuarios.php en ese path tengo el servidor_usuarios.ini
Esta bien, en la versión 3.19.1 lo busca en [b]php/rest/recursos_usuarios.php[/b], [url=https://colab.siu.edu.ar/trac/guarani3/browser/nodos/unt/gestion/trunk/3.19.1/php/rest/autorizacion_guarani.php#L19]ver acá[/url].
Perdón la ignorancia, pero como accedo a dichos servicios?
Veo que en las capturas que adjuntaste lo estas haciendo, podes volver a probar así:
curl -k -v --anyauth -u 'user:pass' 'http://<URL-GUARANI>/rest/status'

Por ejemplo:

curl -k -v --anyauth -u '3w:g3testing' 'http://10.1.5.31/guarani/rest/status'

¿tenes bien configurado en 3W? Revisa esta documentación.

Referencia: https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.19.0/API_REST_GUARANI

saludos.
2

Leo, probé nuevamente y nada. Verifiqué los archivos de la documentación y tenemos todo bien. Lo único que me hace un poco de ruido es el archivo <path_gestion>/php/rest/recursos_usuarios.php lo que veo es que no tiene una entrada para solicitud de títulos, no se si eso se debe agregar o está contemplado en alguna entrada existente.

El archivo se los adjunte en el post anterior.

Hola Javier,

Lo único que me hace un poco de ruido es el archivo /php/rest/recursos_usuarios.php lo que veo es que no tiene una entrada para solicitud de títulos, no se si eso se debe agregar o está contemplado en alguna entrada existente.

Si lo tenes según vi en un adjunto que me mandaste:


	'alumnos/id/certificados/id' => array(
		'GET' => array('usuarios' => array_merge($usuarios_sq, $usuarios_3w))
	),

Revisa que <path_gestion>/php/rest/recursos_usuarios.php este como el template <path_gestion>/php/rest/recursos_usuarios_template.php, salvo los usuarios y si agregaste nuevos Web Services personalizados.

Pregunta:
¿Autogestión puede acceder a Gestión?
¿que pasa si desde el servidor de Autogestión haces ping 10.1.5.31?

saludos.
2

El archivo es el que te mandé. No está modificado. Es más lo probamos con una instancia de SQ en otro servidor y funciona perfecto.

¿Autogestión puede acceder a Gestión? ¿que pasa si desde el servidor de Autogestión haces ping 10.1.5.31?

Sí se puede acceder.

Es el mismo servidor.

Hola Javier,

¿tenes configurado el mismo método de autenticación (basic o digest)?
Revisa en Gestión directiva autenticacion del archivo instalacion/i__desarrollo/p__guarani/rest/servidor.ini, y Autogestión archivo instalacion/servicios_web_config.php que sea el mismo valor.

También revisa el password:
Revisa en Gestión el archivo instalacion/i__desarrollo/p__guarani/rest/servidor_usuarios.ini, y Autogestión archivo instalacion/servicios_web_config.php que sea el mismo valor.

También te voy a pedir debuggear en el archivo php/rest/autorizacion_guarani.php, agrega los siguientes var_dumps:


    public function tiene_acceso($usuario, $ruta)
    {
        var_dump($usuario);
        var_dump($ruta);

Luego proba hacer un curl acá:

curl -k -v --anyauth -u '3w:g3testing' 'http://10.1.5.31/guarani/rest/alumnos/{alumno}/certificados/{certificado}'

Reemplaza {alumno} y {certificado} por el valor correspondiente. Luego enviame lo que muestran dichos var_dumps.

Debería devolver algo así:


lleonardis@Pg156:~$ curl -k -v --anyauth -u '3w:123456789*-a' 'http://localhost:7271/gestion/trunk/rest/v1/alumnos/45/certificados/10'
*   Trying ::1:7271...
* TCP_NODELAY set
* Connected to localhost (::1) port 7271 (#0)
> GET /gestion/trunk/rest/v1/alumnos/45/certificados/10 HTTP/1.1
> Host: localhost:7271
> User-Agent: curl/7.68.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 401 Unauthorized
< Date: Wed, 14 Sep 2022 18:12:30 GMT
< Server: Apache
< API-Version: v1.0
< WWW-Authenticate: Digest realm="Area Restringida",qop="auth",nonce="6322198eb5918",opaque="c873991d21ba181ace4cee0905eee3d6"
< Content-Length: 94
< Content-Type: application/json
< 
* Ignoring the response-body
* Connection #0 to host localhost left intact
* Issue another request to this URL: 'http://localhost:7271/gestion/trunk/rest/v1/alumnos/45/certificados/10'
* Found bundle for host localhost: 0x560dc9540150 [serially]
* Can not multiplex, even if we wanted to!
* Re-using existing connection! (#0) with host localhost
* Connected to localhost (::1) port 7271 (#0)
* Server auth using Digest with user '3w'
> GET /gestion/trunk/rest/v1/alumnos/45/certificados/10 HTTP/1.1
> Host: localhost:7271
> Authorization: Digest username="3w", realm="Area Restringida", nonce="6322198eb5918", uri="/gestion/trunk/rest/v1/alumnos/45/certificados/10", cnonce="OWEwNjNlODMwMjVhNmYwNWM4MzQ2NTkwOTBmYzc2Yzg=", nc=00000001, qop=auth, response="072802b6efa9b3fdf94711653fb96d55", opaque="c873991d21ba181ace4cee0905eee3d6"
> User-Agent: curl/7.68.0
> Accept: */*
> 
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Date: Wed, 14 Sep 2022 18:12:30 GMT
< Server: Apache
< API-Version: v1.0
< Content-Length: 207
< Content-Type: application/json
< 
object(SIUToba\rest\seguridad\rest_usuario)#71 (2) {
  ["usuario":protected]=>
  string(2) "3w"
  ["perfiles":protected]=>
  NULL
}
string(26) "alumnos/45/certificados/10"
{
    "cumple_condiciones": false
* Connection #0 to host localhost left intact
}

saludos.
2

Leo, gracias por el tiempo. Corroborados los archivos mencionados todo está correcto. el tipo de autenticación es basic.

Te paso el log solicitado, la variable $ruta viene NULL


log.png

log.png

Hola Javier,

Esta bien eso, el usuario es “3w” y la ruta es “alumnos/25010/certificados/54”.

Te voy a pedir seguir debbugeando en la función tiene_acceso de php/rest/autorizacion_guarani.php, agrega los siguientes var_dump:


	/**
     * @param SIUToba\rest\seguridad\rest_usuario $usuario
     * @param string $ruta
     *
     * @return bool
     */
    public function tiene_acceso($usuario, $ruta)
    {
		if($usuario != null) {
			$ruta_split = explode('/', $ruta);
			$ruta_generica = $ruta_split[0];
			if(isset($ruta_split[1])) $ruta_generica .= '/id';
			if(isset($ruta_split[2])) $ruta_generica .= '/'.$ruta_split[2];
			if(isset($ruta_split[3])) $ruta_generica .= '/id';
			include 'recursos_usuarios.php';
			
			if( ! isset ($recursos_usuarios[$ruta_generica]) ) {
				return true;
			}
            
			var_dump($recursos_usuarios);
			var_dump($ruta_generica);
			var_dump($usuario->get_usuario());
			var_dump(rest::request()->get_method());
            
			if( in_array($usuario->get_usuario(), $recursos_usuarios[$ruta_generica][rest::request()->get_method()]['usuarios']) ) {
				return true;
			}

		}
		return false;
    }

Luego envíame lo que imprime.

saludos.
2

Ahí va…


debug.rar (717 Bytes)

Hola Javier, gracias por los logs, ya veo el problema:

var_dump($recursos_usuarios);


  ["alumnos/id/certificados/id"]=>
  array(1) {
    ["GET"]=>
    array(1) {
      ["usuarios"]=>
      array(2) {
        [0]=>
        string(2) "sq"
        [1]=>
        string(7) "guarani"
      }
    }
  }

var_dump($ruta_generica);

string(26) "alumnos/id/certificados/id"

var_dump($usuario->get_usuario());

string(2) "3w"

var_dump(rest::request()->get_method());

string(3) "GET"

En <path_gestion>/php/rest/recursos_usuarios.php debes tener configurado así:


$usuarios_3w = ['guarani'];

Debes agregar el usuario “3w” a dicho array:


$usuarios_3w = ['guarani', '3w'];

Revisa esto:
https://documentacion.siu.edu.ar/wiki/SIU-Guarani/version3.19.0/interfaces/api-guarani-perfil-funcional
https://documentacion.siu.edu.ar/wiki/SIU-Guarani/Version3.19.0/API_REST_GUARANI

saludos.
2

Leo, funcionó! gracias por la asistencia y la la paciencia!

De nada Javier!!!

Recorda quitar los var_dump que agregamos en el archivo php/rest/autorizacion_guarani.php.

saludos.