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 2018-12-05 13:14:52

mart1
Member
Registered: 2017-11-30
Posts: 21

Créer un lien ou un formulaire de login via l'API

Bonjour,

Je cherche à créer une sorte de SSO avec l'API : j'aimerai créer un formulaire ou un lien sur une site à part (autre domaine / serveur que GLPI) permettant à un utilisateur d'être redirigé vers GLPI en étant déjà authentifié.

J'ai réussi à faire fonctionner la méthode initsession et je récupère le session token.
J'ai testé la méthode getfullsession pensant qu'elle me fournirait des informations permettant de créer un formulaire ou un lien vers GLPI en automatiquement connecté. Mais je ne vois rien de tel dans le retour de la fonction getfullsession :

{
   "session":{
      "glpi_plugins":{
         "1":"formcreator",
         "2":"news",
         "3":"behaviors",
         "4":"datainjection"
      },
      "valid_id":"XXXXXXXXXXXXXXXXXXXXXXXXXXX",
      "glpi_currenttime":"2018-12-04 10:51:48",
      "glpi_use_mode":0,
      "glpi_table_of":{
         "User":"glpi_users",
         "Config":"glpi_configs",
         "Profile":"glpi_profiles",
         "APIClient":"glpi_apiclients"
      },
      "glpiID":120,
      "glpiname":"MCF",
      "glpirealname":"MCF",
      "glpifirstname":"MCF",
      "glpidefault_entity":0,
      "glpiusers_idisation":true,
      "glpiextauth":1,
      "glpiauthtype":1,
      "glpiroot":"",
      "glpi_plannings":[

      ],
      "glpicrontimer":1543917008,
      "glpi_tabs":[

      ],
      "glpibackcreated":0,
      "glpicsv_delimiter":";",
      "glpidate_format":1,
      "glpidefault_requesttypes_id":1,
      "glpidisplay_count_on_home":5,
      "glpiduedatecritical_color":"#ff0000",
      "glpiduedatecritical_less":5,
      "glpiduedatecritical_unit":"%",
      "glpiduedateok_color":"#06ff00",
      "glpiduedatewarning_color":"#ffb800",
      "glpiduedatewarning_less":20,
      "glpiduedatewarning_unit":"%",
      "glpifollowup_private":0,
      "glpiis_ids_visible":0,
      "glpikeep_devices_when_purging_item":0,
      "glpilanguage":"fr_FR",
      "glpilist_limit":15,
      "glpilock_autolock_mode":1,
      "glpilock_directunlock_notification":0,
      "glpinames_format":1,
      "glpinotification_to_myself":1,
      "glpinumber_format":0,
      "glpipdffont":"helvetica",
      "glpipriority_1":"#fff2f2",
      "glpipriority_2":"#ffe0e0",
      "glpipriority_3":"#ffcece",
      "glpipriority_4":"#ffbfbf",
      "glpipriority_5":"#ffadad",
      "glpipriority_6":"#ff5555",
      "glpirefresh_ticket_list":0,
      "glpiset_default_tech":1,
      "glpiset_default_requester":1,
      "glpishow_count_on_tabs":1,
      "glpishow_jobs_at_login":0,
      "glpitask_private":0,
      "glpitask_state":1,
      "glpiuse_flat_dropdowntree":0,
      "glpilayout":"lefttab",
      "glpiticket_timeline":1,
      "glpiticket_timeline_keep_replaced_tabs":0,
      "glpipalette":"auror",
      "glpihighcontrast_css":0,
      "glpi_dropdowntranslations":[

      ],
      "glpipluralnumber":2,
      "glpiprofiles":{
         "1":{
            "name":"Self-Service",
            "entities":[
               {
                  "id":0,
                  "name":"Root entity",
                  "is_recursive":0
               }
            ]
         }
      },
      "glpiactiveprofile":{
         "id":1,
         "name":"Self-Service",
         "interface":"helpdesk",
         "is_default":1,
         "helpdesk_hardware":1,
         "helpdesk_item_type":[
            "Computer",
            "Monitor",
            "NetworkEquipment",
            "Peripheral",
            "Phone",
            "Printer",
            "Software"
         ],
         "ticket_status":{
            "1":{
               "2":0,
               "3":0,
               "4":0,
               "5":0,
               "6":0
            },
            "2":{
               "1":0,
               "3":0,
               "4":0,
               "5":0,
               "6":0
            },
            "3":{
               "1":0,
               "2":0,
               "4":0,
               "5":0,
               "6":0
            },
            "4":{
               "1":0,
               "2":0,
               "3":0,
               "5":0,
               "6":0
            },
            "5":{
               "1":0,
               "2":0,
               "3":0,
               "4":0
            },
            "6":{
               "1":0,
               "2":0,
               "3":0,
               "4":0,
               "5":0
            }
         },
         "create_ticket_on_login":0,
         "tickettemplates_id":0,
         "followup":0,
         "knowbase":0,
         "password_update":1,
         "reminder_public":0,
         "reservation":0,
         "rssfeed_public":0,
         "show_group_hardware":0,
         "task":0,
         "ticket":0,
         "ticketvalidation":0,
         "entities":[
            {
               "id":0,
               "name":"Root entity",
               "is_recursive":0
            }
         ]
      },
      "glpiactiveentities":[
         0
      ],
      "glpisearch":[

      ],
      "glpiactiveentities_string":"'0'",
      "glpiparententities":[

      ],
      "glpiparententities_string":"",
      "glpiactive_entity":0,
      "glpiactive_entity_recursive":0,
      "glpiactive_entity_name":"Root entity",
      "glpiactive_entity_shortname":"Root entity",
      "glpishowallentities":0,
      "glpigroups":[

      ]
   }
}

J'ai déjà créé des scripts qui envoi au formulaire de login de GLPI l'identifiant et mot de passe et ça marche bien. Par contre j'aimerai faire un système qui "résiste" au changement de mot de passe utilisateur en utilisant les token API (qui ne change pas lorsque l'utilisateur change de mot de passe).

Sauriez-vous comment faire ?

Merci,
Martin

Offline

#2 2018-12-05 15:05:38

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,145

Re: Créer un lien ou un formulaire de login via l'API

vous pouvez ouvrir une session admin et récupérer /User/$user_id  qui vous envoie le personal token de l'utilisateur.
ensuite vous pouvez faire un init session avec ce token utilisateur et le app-token

/initSession?Content-Type=%20application/json&app_token=".$app_token."&user_token=".$user_token;


Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1  Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6

Offline

#3 2018-12-05 16:00:19

mart1
Member
Registered: 2017-11-30
Posts: 21

Re: Créer un lien ou un formulaire de login via l'API

Bonjour,

Merci pour ta réponse.

Je cherche ensuite à créer une URL ou un formulaire afin d'identifier automatiquement l'utilisateur sur l'interface WEB de GLPI.

Une idée ?

Merci,
Martin

Offline

#4 2018-12-05 19:00:54

mart1
Member
Registered: 2017-11-30
Posts: 21

Re: Créer un lien ou un formulaire de login via l'API

Bonsoir,

J'ai tenté de faire comme tu me l'indiques:

1/ J'ai fait une requête initSession avec le SuperAdmin
2/ Avec le session token récupéré, j'ai fait une requête /user/114 (<= 144  = ID de l'utilisateur que je souhaite connecter à l'interface web de glpi). J'obtiens le personnal token
3/ Je rentre ce personnal token dans l'url au niveau de user_token (?)

/apirest.php/initSession?Content-Type=%20application/json&app_token=BBBBBBBBBBBBBBBB&user_token=AAAAAAAAAAAAA


J'obtiens :

["ERROR_GLPI_LOGIN_USER_TOKEN","le paramètre user_token semble incorrect"]


Une idée ?

Merci,
Martin

Offline

#5 2018-12-05 19:04:40

mart1
Member
Registered: 2017-11-30
Posts: 21

Re: Créer un lien ou un formulaire de login via l'API

Il fallait lire 114 et pas 144 ;-)

Offline

#6 2018-12-05 19:39:00

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,145

Re: Créer un lien ou un formulaire de login via l'API

oups, le usertoken est pour la version 9.1  pour les versions suivantes il faut utiliser l'API token de l'utilisateur.

mais  la syntaxe ci dessous fonctionne en 9.3.3
localhost/glpi933//apirest.php/initSession?Content-Type=%20application/json&app_token=xxxxxxx&user_token=yyyyyyy


Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1  Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6

Offline

#7 2018-12-05 20:00:21

mart1
Member
Registered: 2017-11-30
Posts: 21

Re: Créer un lien ou un formulaire de login via l'API

Bonsoir,

En utilisant le jeton API, j'obtiens la réponse:

{"session_token":"yyyyyyyyyyyyyyyyyyyyyyyyyy"}

Donc ca marche.

J'aimerai maintenant connecter mon utilisateur sur l'interface web sans qu'il ait besoin de taper son identifiant/mot de passe.

Merci pour votre aide

Martin

Offline

#8 2018-12-06 00:28:53

LaDenrée
HELPER
Registered: 2012-11-19
Posts: 6,145

Re: Créer un lien ou un formulaire de login via l'API

ça je ne sais pas faire, je ne sais même pas si c'est possible a part faire du vrai  SSO.


Trouver la panne avant de réparer...
GLPI10.0.10 (ubuntu 22.04 PHP8.1  Mariadb10.6 ) plugins : comportements 2.7.2 reports 1.16.0 formcreator 2.13.8, datainjection 2.13.4 fields 1.21.6

Offline

Board footer

Powered by FluxBB