You are not logged in.

Announcement

 Téléchargez la dernière version stable de GLPI      -     Et vous, que pouvez vous faire pour le projet GLPI ? :  Contribuer
 Download last stable version of GLPI                      -     What can you do for GLPI ? :  Contribute

#1 2019-08-27 16:06:56

peuple2lherb
Member
Registered: 2019-08-27
Posts: 3

InitSession avec Utilisateur/Mdp

Bonjour à tous,
Voici le problème que je rencontre.
J'ai développé en local un formulaire pour créer des tickets sur une installation de GLPI (9.4.2).
Avant d'accéder au formulaire, j'ai une page de login/mot de passe qui se connecte à l'api avec le script suivant :

//generate Token from user data
  $token=base64_encode($dataObj->{'companyName'}.":".$dataObj->{'companyPass'});

// Init Session
  $url = $api_url . "/initSession";
  $headers1 = array(
    ('Content-Type: application/json'),
    ('App-Token:' .$app_token),
    ('Authorization: Basic '.$token)
  );
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL,$url);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
	curl_setopt($ch, CURLOPT_HTTPHEADER, $headers1);
  $session = curl_exec($ch); 
	curl_close ($ch); 
	$obj = json_decode($session,true); 
  $sess_token = $obj['session_token'];
  $headers2 = array(
    ('Content-Type: application/json'),
    ('App-Token:'.$app_token),
    ('Session-Token: '.$sess_token)
  );

// Request Profile Details
  $url = $api_url . "/getFullSession";
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL,$url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  curl_setopt($ch, CURLOPT_HTTPHEADER, $headers2);
  $profile = curl_exec($ch);
  curl_close ($ch);

En local tout fonctionne. J'utilise le token app-token provenant de Configuration\Général\Api (la clé provient de l'utilisateur créé par défaut full access from localhost)
En distant, sur mon site donc, idem. J'ai pris soin de retirer les restrictions d'adresse IP de ce même utilisateur.

Lorsque j'essaie de me connecter, j'ai une erreur ERROR_APP_TOKEN_PARAMETERS_MISSING (à la première requête) et je n'arrive pas à récupérer le session_token de l'utilisateur.

Si j'essaie de me connecter en direct, à savoir :

http://url.de.glpi/apirest.php/initSession?user_token=[USERTOKEN]&app_token=[APPTOKEN]

la clé APPTOKEN étant la même que dans mon script
la clé USERTOKEN étant celle de l'utilisateur que j'essaie de connecté
=> et là j'ai bien une initialisation de session

Je ne comprends pas d'où vient le problème.
Quelqu'un pour m'éclairer ?

Merci beaucoup à vous.

Offline

#2 2019-08-27 16:18:49

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 4,650

Re: InitSession avec Utilisateur/Mdp

avez vous essayé de passer le app-token et user_token dans l'url et pas dans le header ?


vous ne vous connectez pas avec la même methode  le script utilise  basic :  login+pw  la connexion directe utilise usertoken. ça explique la différence de réponse.

avez vous essayé de faire l'autentification avec user_token dans l'API ? ( pour commencer et vérifier que ça marche comme l'url directe) ?


Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+formcreator2.5.2 PHP7.0 Mariadb10
*GLPI 9.4.3(behaviours2.2.1+fusioninventoty 9.4+1.1+applicatifs2.5.0+fields 1.9.1)hebergé sur serveur mutualisé.

Offline

#3 2019-08-27 18:25:54

peuple2lherb
Member
Registered: 2019-08-27
Posts: 3

Re: InitSession avec Utilisateur/Mdp

oui, je sais que ce n'est pas la même méthode
d'ailleurs, je ne connais pas la méthode pour passer le nom d'utilisateur et mot de passe dans l'url via authorization: basic
j'aurais aimé pouvoir tester si j'arrivais à me connecter en direct sans passer par le user_token, bref

Donc :
en utilisant le app_token et le user_token (jeton api de l'utilisateur que je veux connecter) directement dans l'url, cela fonctionne : je reçois un paramètre session_token

en utilisant l'user_token dans mon script, c-a-d via le header, comme suit :

$headers1 = array(
    ('Content-Type: application/json'),
    ('App-Token:' .$app_token),
    ('Authorization: user_token [USERTOKEN]')
  );

j'ai toujours
ERROR_APP_TOKEN_PARAMETERS_MISSING

Enfin, si je passe la valeur de app_token en "dur" dans le header, c-a-d pas par le biais d'une variable comme suit :

$headers1 = array(
    ('Content-Type: application/json'),
    ('App-Token:[APPTOKEN]'),
    ('Authorization: user_token [USERTOKEN]')
  );

j'ai également la même erreur :
ERROR_APP_TOKEN_PARAMETERS_MISSING

Incompréhensible.

Est-ce que ça ne peut pas venir de curl et de mon hébergeur (OVH) ?

Offline

#4 2019-08-28 09:12:49

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 4,650

Re: InitSession avec Utilisateur/Mdp

je viens de vérifier sur les différentes instances :
ça marche bien sur mes serveurs en local, mais j'ai le même problème sur l'instance chez OVH ( glpi9.4.3)

pour me connecter je dois utiliser :
http://url.de.glpi/apirest.php/initSession?user_token=[USERTOKEN]&app_token=[APPTOKEN]


je continue à chercher.


Trouver la panne avant de réparer...
*GLPI 9.1.6+fusion9.1+1.1+behaviours1.5.0+reports+fields+appliances+pdf+badges+formcreator2.5.2 PHP7.0 Mariadb10
*GLPI 9.4.3(behaviours2.2.1+fusioninventoty 9.4+1.1+applicatifs2.5.0+fields 1.9.1)hebergé sur serveur mutualisé.

Offline

#5 2019-08-28 09:35:48

peuple2lherb
Member
Registered: 2019-08-27
Posts: 3

Re: InitSession avec Utilisateur/Mdp

Je suis à la fois content et pas content smile
Au moins, je ne suis pas fou.
J'avoue que j'ai cherché un petit moment sans trouver. Peut-être le problème vient-il directement d'une fonction dans GLPI.
Merci en tout cas de prendre le temps de chercher.

Offline

Board footer

Powered by FluxBB