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 2022-10-11 11:54:00

Isia
Member
Registered: 2019-05-26
Posts: 96

Connexion GLPI avec Azure AD

Bonjour à tous.

J'ai vu sur le forum que la connexion avec Azure AD intéressé pas mal de monde. J'avais ce besoin également, que j'ai comblé en créant mon propre plugin de connexion.

Depuis la version 10, mon plugin ne fonctionne plus très bien. Du coup je me suis rabattu sur le plugin d'un créateur, avec lequel, je mettais inspiré pour la création de mon plugin : https://github.com/edgardmessias/glpi-singlesignon

J'ai identifié 2 soucis sur ce plugin :

  • Pas de documentation

  • Pas de possibilité d'ajouter des utilisateurs à la volée

Du coup, j'ai repris son plugin (qui a bien évolué depuis la dernière fois que je l'avais vu) et j'ai intégré la possibilité d'ajouter des utilisateurs à la volée. Et tout fonctionne correctement.

Seulement, je ne peux pas proposer cette solution au créateur du plugin car elle est incomplète ! En effet, avec Azure les champs récupérés ne sont pas les mêmes suivant sa configuration et ne correspondent pas aux champs servant à l'insertion d'un utilisateur.
Du coup, la solution fonctionne pour moi mais ne fonctionnera pas pour tout le monde.

Je cherche quelqu'un pour participer à cette évolution car je n'ai pas le temps pour le moment de la continuer et ce serait dommage de ne pas partager cela ! 

Globalement, il reste à :

  • Modifier le fichier hook.php pour intégrer des colonnes supplémentaires pour inclure les bons noms de champs d'Azure

  • Modifier provider.class.php, pour intégrer la récupération de ces champs

  • Voir pour simplifier tout ça pour obtenir de manière automatique les bons champs et les associés aux champs servant à la création de l'utilisateur

  • Documenter

Je vais en faire une partie mais pas de suite. Du coup si un développeur volontaire veux bien participer, ça serait cool.

Lien de mon git : https://github.com/virtazp/glpi-singlesignon

Offline

#2 2022-10-18 18:11:14

tizko67
Member
Registered: 2022-10-18
Posts: 1

Re: Connexion GLPI avec Azure AD

Top merci pour ton lien ça fonctionne nikel !
Tu devrais faire un tuto pour ceux qui en en besoin je viens de passer 2h à chercher comment mettre ça en place hmm

Merci encore !

Offline

#3 2022-10-18 20:23:37

Isia
Member
Registered: 2019-05-26
Posts: 96

Re: Connexion GLPI avec Azure AD

Salut !

Tu as pris quelle version ? Celle de Edgard Messias ou la mienne avec l'ajout des utilisateurs ?

Si je trouve personne pour m'aider, j'écrirai la doc.

Offline

#4 2022-11-02 23:32:16

raphou20
Member
Registered: 2016-09-04
Posts: 18

Re: Connexion GLPI avec Azure AD

Salut,

J'aimerais bien la doc stp je galère a le mettre en place, j'en suis la :

j'ai bien tout configuré mais je reste sur ce message d'erreur :

AADSTS50011: The redirect URI 'https://support.dentego.fr/glpi/plugins … provider/2' specified in the request does not match the redirect URIs configured for the application '3948d36b-8e75-4d1c-9f6e-XXXX'. Make sure the redirect URI sent in the request matches one added to your application in the Azure portal. Navigate to https://aka.ms/redirectUriMismatchError to learn more about how to fix this

Alors que coté Microsoft :

Redirect URIs

The URIs we will accept as destinations when returning authentication responses (tokens) after successfully authenticating or signing out users. The redirect URI you send in the request to the login server should match one listed here. Also referred to as reply URLs. Learn more about Redirect URIs and their restrictions

https://support.dentego.fr/glpi/plugins … provider/2

Merci,

Last edited by raphou20 (2022-11-02 23:33:36)

Offline

#5 2022-11-03 09:52:44

Isia
Member
Registered: 2019-05-26
Posts: 96

Re: Connexion GLPI avec Azure AD

Salut, je peux t'aider si tu veux !

Déjà commence par enregistrer ton application dans Azure en tant qu'application web. L'url de redirection doit être https://ton-domaine/plugins/singlesignon/front/callback.php/provider/1

Toujours dans azure, génère une clef secrète dans l'onglet Certificats & secret que tu colleras dans le plugin

Dans l'onglet Authentification, coche Jetons d’accès (utilisés pour les flux implicites)

Là où c'est un peu galère, c'est au niveau du réglage du plugin. Personnellement j'ai choisi le SSO Type en Generic. En effet, si tu choisis Azure, tu as le tenant Common. Le tenant, c'est globalement l'ID de ton entité. Donc généralement avec Azure, tu as une entité et un id particulier. Donc Common n'est pas bon pour moi.

En choisissant Generic, tu renseignes

{tenant} = Tu le remplaces soit par l'id de ton tenant (ID Entité ou ID de l'annuaire) Croché compris ! Donc ça peut donner : https://login.microsoftonline.com/sdfgb … /authorize

Voilà, tiens nous au courant smile

Offline

#6 2022-11-06 15:12:32

raphou20
Member
Registered: 2016-09-04
Posts: 18

Re: Connexion GLPI avec Azure AD

Meri Isia pour ton aide,

Cela ne fonctionne toujours pas....

Peux on entrer en contact directement sans passer par le forum ?

Merci,

Offline

#7 2022-11-17 16:18:38

elprimo
Member
Registered: 2022-11-08
Posts: 8

Re: Connexion GLPI avec Azure AD

Bonjour Isia,

J'ai configuré singlesign celui de edgarlessia. ça fonctonne bien mais ne repond pas à tous nos besoins. Nous cherchons une solution pareil comme vous c'est de création des utilisateurs à la volée. Est-ce que votre plug in est compatible avec la version de glpi 10.0.3 ??

Cordialement,

Isia wrote:

Bonjour à tous.

J'ai vu sur le forum que la connexion avec Azure AD intéressé pas mal de monde. J'avais ce besoin également, que j'ai comblé en créant mon propre plugin de connexion.

Depuis la version 10, mon plugin ne fonctionne plus très bien. Du coup je me suis rabattu sur le plugin d'un créateur, avec lequel, je mettais inspiré pour la création de mon plugin : github.com/edgardmessias/glpi-singlesignon

J'ai identifié 2 soucis sur ce plugin :

  • Pas de documentation

  • Pas de possibilité d'ajouter des utilisateurs à la volée

Du coup, j'ai repris son plugin (qui a bien évolué depuis la dernière fois que je l'avais vu) et j'ai intégré la possibilité d'ajouter des utilisateurs à la volée. Et tout fonctionne correctement.

Seulement, je ne peux pas proposer cette solution au créateur du plugin car elle est incomplète ! En effet, avec Azure les champs récupérés ne sont pas les mêmes suivant sa configuration et ne correspondent pas aux champs servant à l'insertion d'un utilisateur.
Du coup, la solution fonctionne pour moi mais ne fonctionnera pas pour tout le monde.

Je cherche quelqu'un pour participer à cette évolution car je n'ai pas le temps pour le moment de la continuer et ce serait dommage de ne pas partager cela ! 

Globalement, il reste à :

  • Modifier le fichier hook.php pour intégrer des colonnes supplémentaires pour inclure les bons noms de champs d'Azure

  • Modifier provider.class.php, pour intégrer la récupération de ces champs

  • Voir pour simplifier tout ça pour obtenir de manière automatique les bons champs et les associés aux champs servant à la création de l'utilisateur

  • Documenter

Je vais en faire une partie mais pas de suite. Du coup si un développeur volontaire veux bien participer, ça serait cool.

Offline

#8 2022-11-17 17:24:24

Isia
Member
Registered: 2019-05-26
Posts: 96

Re: Connexion GLPI avec Azure AD

Bonjour, oui. Cependant, il faut peut être modifier 2-3 champs dans le code pour le faire correspondre à vos besoins.

Etes-vous à l'aise avec php ? ou pas du tout ?

Je viens de pousser une modif à l'instant.

Globalement, si l'utilisateur essaye de se connecter mais qu'il n'existe pas, il est créé.

Voici les champs à modifier dans le code si besoin pour faire correspondre votre configuration :
Le fournisseur Azure AD  fournit des champs lorsqu'on l'appel, c'est ces champs qui peuvent être différents.

inc/provider.class.php, à partir de la ligne 1262

            $userPost['name'] = $resource_array['displayName'];
            $userPost['realname'] = preg_split('/ /', $resource_array['displayName'])[1];
            $userPost['_useremails'][-1] = $resource_array['mail'];
            $userPost['firstname'] = preg_split('/ /', $resource_array['displayName'])[0];
            $userPost['api_token'] = $tokenAPI;
            $userPost['personal_token'] = $tokenPersonnel;
            $userPost['is_active'] = 1;
            $userPost['add'] = "1";
            $newID = $user->add($userPost);
  • $userPost['name'] = $resource_array['displayName']; Displayname peut être name ou autre dans ce genre

  • $userPost['realname'] = preg_split('/ /', $resource_array['displayName'])[1]; Displayname peut être name ou autre dans ce genre

  • $userPost['_useremails'][-1] = $resource_array['mail']; mail peut être email ou autre dans ce genre

  • $userPost['firstname'] = preg_split('/ /', $resource_array['displayName'])[0]; Displayname peut être name ou autre dans ce genre

Comment connaitre mes champs ? (Dans le cas où les champs que j'ai mis ne fonctionne pas)

A la ligne 58 du fichier inc/provider.class.php , il y a cette variable :

public $debug = false;

, il faut mettre

public $debug = true;

et re-essayer, cela va afficher sur la page les champs récupérer depuis Azure (Et plein d'autre trucs, donc on panique pas et on regarde attentivement jusqu'à trouver ce qui nous intéresse.

Edit :

Je viens de faire une modification qui doit normalement prendre en compte plusieurs champs ('userPrincipalName', 'login', 'username', 'id', 'name', 'displayName').

Je viens de tester et cela fonctionne.

J'attend votre retour.

Last edited by Isia (2022-11-17 18:00:21)

Offline

#9 2022-11-18 13:09:21

elprimo
Member
Registered: 2022-11-08
Posts: 8

Re: Connexion GLPI avec Azure AD

Bonjour Isia, Ca marche nickel pour moi aussi. Ca fait un mois que je cherchais une solution. Enfin, je l'ai trouvée grace à vous. Merci beaucoup!

Non, je suis pas à l'aise avec PHP.

Last edited by elprimo (2022-11-18 13:09:52)

Offline

#10 2023-02-07 19:39:31

elprimo
Member
Registered: 2022-11-08
Posts: 8

Re: Connexion GLPI avec Azure AD

Bonjour Isia,
Dans votre code tous les users sont créés à la volet sont rajouté dans l'entité racines.
du coup j'ai ajouté cette ligne dans votre code $userPost['entities_id'] = getEntityID($resource_array['department']);
J'ai créé une nouvelle table dans la bdd pour transformer la valeur du champ $resource_array['department'] au entity_id(int) afin que les users soient ajouté dans la liste d'entité lors de la première connexion. mais j'arrive pas faire la fonction d'envoyer une requête à la BDD. Pourriez-vous me corriger la fonction getEntityID svp ?
Voici la fonction getEntityID :
public function getEntityID() {

      $result = mysqli_query("SELECT * FROM department2entity");
         
      // Loop through each row in the table
      while ($row = mysqli_fetch_assoc($result)) {
      // Compare the input to the value in the current row
      if ($department == $row['entity']) {
      // Return the ID of the matching value
         return $row['entity_id'];
      }
   }
  // If no match is found, return false
   return false;
   }

Isia wrote:

Bonjour, oui. Cependant, il faut peut être modifier 2-3 champs dans le code pour le faire correspondre à vos besoins.

Etes-vous à l'aise avec php ? ou pas du tout ?

Je viens de pousser une modif à l'instant.

Globalement, si l'utilisateur essaye de se connecter mais qu'il n'existe pas, il est créé.

Voici les champs à modifier dans le code si besoin pour faire correspondre votre configuration :
Le fournisseur Azure AD  fournit des champs lorsqu'on l'appel, c'est ces champs qui peuvent être différents.

inc/provider.class.php, à partir de la ligne 1262

            $userPost['name'] = $resource_array['displayName'];
            $userPost['realname'] = preg_split('/ /', $resource_array['displayName'])[1];
            $userPost['_useremails'][-1] = $resource_array['mail'];
            $userPost['firstname'] = preg_split('/ /', $resource_array['displayName'])[0];
            $userPost['api_token'] = $tokenAPI;
            $userPost['personal_token'] = $tokenPersonnel;
            $userPost['is_active'] = 1;
            $userPost['add'] = "1";
            $newID = $user->add($userPost);
  • $userPost['name'] = $resource_array['displayName']; Displayname peut être name ou autre dans ce genre

  • $userPost['realname'] = preg_split('/ /', $resource_array['displayName'])[1]; Displayname peut être name ou autre dans ce genre

  • $userPost['_useremails'][-1] = $resource_array['mail']; mail peut être email ou autre dans ce genre

  • $userPost['firstname'] = preg_split('/ /', $resource_array['displayName'])[0]; Displayname peut être name ou autre dans ce genre

Comment connaitre mes champs ? (Dans le cas où les champs que j'ai mis ne fonctionne pas)

A la ligne 58 du fichier inc/provider.class.php , il y a cette variable :

public $debug = false;

, il faut mettre

public $debug = true;

et re-essayer, cela va afficher sur la page les champs récupérer depuis Azure (Et plein d'autre trucs, donc on panique pas et on regarde attentivement jusqu'à trouver ce qui nous intéresse.

Edit :

Je viens de faire une modification qui doit normalement prendre en compte plusieurs champs ('userPrincipalName', 'login', 'username', 'id', 'name', 'displayName').

Je viens de tester et cela fonctionne.

J'attend votre retour.

Last edited by elprimo (2023-02-07 19:41:52)

Offline

#11 2023-02-10 10:46:01

jclairie
Member
From: Aquitaine
Registered: 2019-09-05
Posts: 7

Re: Connexion GLPI avec Azure AD

Merci pour vos efforts ! Je vais tester dès que possible et vous ferai un retour

Offline

#12 2023-04-21 10:49:19

nekoinformatique
Member
Registered: 2023-04-21
Posts: 1

Re: Connexion GLPI avec Azure AD

Bonjour,

Je viens vers vous après l'installation sur une installation vierge.
Après avoir suivi et rempli en mode Generic, j'ai toujours le même message à la connexion :
Utilisateur non autorisé à se connecter à GLPI Se reconnecter
Par contre, j'ai beau mettre Add user in database à oui, en enregistrent, il revient à non...

Merci d'avance
Après activation debug :

getAccessToken: Array ( [token_type] => Bearer [scope] => email openid profile User.Read [expires_in] => 4328 [ext_expires_in] => 4328 [access_token] => ****** [id_token] => **** ) getResourceOwner: Array ( [@odata.context] => https://graph.microsoft.com/v1.0/$metadata#users/$entity [businessPhones] => Array ( ) [displayName] => *** [givenName] => [jobTitle] => [mail] => ***@*** [mobilePhone] => [officeLocation] => [preferredLanguage] => [surname] => [userPrincipalName] => ***@*** [id] => **** )
Warning: Undefined array key "add_user" in /home/****/www/***/plugins/singlesignon/inc/provider.class.php on line 1213

Ajout du champ "adduser" dans la table singlesignon_providers

Last edited by nekoinformatique (2023-04-21 11:17:05)

Offline

#13 2023-04-21 14:35:27

Isia
Member
Registered: 2019-05-26
Posts: 96

Re: Connexion GLPI avec Azure AD

Salut,

Probablement que cela se produit si l'adresse mail ou le login ou autre existe déjà dans la BDD de glpi.

Pour le add_user, regardez si dans la BDD, la colonne existe dans la table du plugin.

Offline

#14 2023-05-08 03:54:45

jfmartineau
Member
Registered: 2023-05-08
Posts: 1

Re: Connexion GLPI avec Azure AD

nekoinformatique wrote:

Bonjour,

Je viens vers vous après l'installation sur une installation vierge.
Après avoir suivi et rempli en mode Generic, j'ai toujours le même message à la connexion :
Utilisateur non autorisé à se connecter à GLPI Se reconnecter
Par contre, j'ai beau mettre Add user in database à oui, en enregistrent, il revient à non...

Merci d'avance
Après activation debug :

getAccessToken: Array ( [token_type] => Bearer [scope] => email openid profile User.Read [expires_in] => 4328 [ext_expires_in] => 4328 [access_token] => ****** [id_token] => **** ) getResourceOwner: Array ( [@odata.context] => https://graph.microsoft.com/v1.0/$metadata#users/$entity [businessPhones] => Array ( ) [displayName] => *** [givenName] => [jobTitle] => [mail] => ***@*** [mobilePhone] => [officeLocation] => [preferredLanguage] => [surname] => [userPrincipalName] => ***@*** [id] => **** )
Warning: Undefined array key "add_user" in /home/****/www/***/plugins/singlesignon/inc/provider.class.php on line 1213

Ajout du champ "adduser" dans la table singlesignon_providers


Meme probleme ici , on a fait des test avec des nouveau usager et on me revien tjrs avec Utilisateur non autorisé.

Offline

#15 2023-07-25 01:02:18

Achemeneuh
Member
Registered: 2020-04-11
Posts: 6

Re: Connexion GLPI avec Azure AD

Bonjour, et merci pour ce plugin !

J'ai testé avec SSO Type "Azure" ou "Generic", mais le pb est le même:
Si je clique sur "Test Single Sign-on", une fenêtre d'authentification Microsoft me demande d'insérer le compte mail à tester, et le résultat semble satisfaisant, car j'ai le message suivant:

---------------------------------------------------------------------------
### BEGIN ###

getAccessToken:
Array
(
    [token_type] => Bearer
    [scope] => openid profile User.Read User.Read.All User.ReadBasic.All email
    [expires_in] => 5001
    [ext_expires_in] => 5001
    [access_token] => eyJ0eXAi..........
    [id_token] => eyJ0eXAiOiJKV.........
)

getResourceOwner:
Array
(
    [@odata.context] => (https)://graph.microsoft.com/v1.0/$metadata#users/$entity
    [businessPhones] => Array
        (
        )

    [displayName] => (Nom Prénom de l'utilisateur)
    [givenName] => (Prénom de l'utilisateur)
    [jobTitle] =>
    [mail] => (adresse mail de l'utilisateur)
    [mobilePhone] =>
    [officeLocation] =>
    [preferredLanguage] => fr-FR
    [surname] => (Nom de l'utilisateur)
    [userPrincipalName] => (login de l'utilisateur)
    [id] => (id de l'utilisateur)
)
### END ###
---------------------------------------------------------------------------

A noter qu'il m'a fallu ajouter dans Azure une 2e URI, la même que celle fournie par Single Sign-on, mais avec "/test/1" à la fin.
=> (https)://xxx.fr/plugins/singlesignon/front/callback.php/provider/1/test/1

Mon problème est que lorque je tente une connexion depuis la page d'authentification, en cliquant sur le nouveau bouton "Se connecter avec XXX", le message suivant apparaît:
"Provider not defined."

Une petite idée ?

Offline

#16 2023-09-28 11:53:48

anis002
Member
Registered: 2023-09-06
Posts: 7

Re: Connexion GLPI avec Azure AD

Bonjour Achemeneuh,
J'ai le meme problème, as-tu trouvé une solution ?

Offline

#17 2023-09-29 11:05:22

baptiste.chanal
Member
Registered: 2011-09-06
Posts: 20

Re: Connexion GLPI avec Azure AD

Achemeneuh wrote:

Bonjour, et merci pour ce plugin !

J'ai testé avec SSO Type "Azure" ou "Generic", mais le pb est le même:
Si je clique sur "Test Single Sign-on", une fenêtre d'authentification Microsoft me demande d'insérer le compte mail à tester, et le résultat semble satisfaisant, car j'ai le message suivant:

---------------------------------------------------------------------------
### BEGIN ###

getAccessToken:
Array
(
    [token_type] => Bearer
    [scope] => openid profile User.Read User.Read.All User.ReadBasic.All email
    [expires_in] => 5001
    [ext_expires_in] => 5001
    [access_token] => eyJ0eXAi..........
    [id_token] => eyJ0eXAiOiJKV.........
)

getResourceOwner:
Array
(
    [@odata.context] => (https)://graph.microsoft.com/v1.0/$metadata#users/$entity
    [businessPhones] => Array
        (
        )

    [displayName] => (Nom Prénom de l'utilisateur)
    [givenName] => (Prénom de l'utilisateur)
    [jobTitle] =>
    [mail] => (adresse mail de l'utilisateur)
    [mobilePhone] =>
    [officeLocation] =>
    [preferredLanguage] => fr-FR
    [surname] => (Nom de l'utilisateur)
    [userPrincipalName] => (login de l'utilisateur)
    [id] => (id de l'utilisateur)
)
### END ###
---------------------------------------------------------------------------

A noter qu'il m'a fallu ajouter dans Azure une 2e URI, la même que celle fournie par Single Sign-on, mais avec "/test/1" à la fin.
=> (https)://xxx.fr/plugins/singlesignon/front/callback.php/provider/1/test/1

Mon problème est que lorque je tente une connexion depuis la page d'authentification, en cliquant sur le nouveau bouton "Se connecter avec XXX", le message suivant apparaît:
"Provider not defined."

Une petite idée ?


Bonjour,
Nous avons également exactement le même problème que décrit Achemeneuh.
Pensez vous que cela puisse venir d'un beug du plugin ou d'un problème de configuration? sachant que les tests affichent les mêmes résultats qu'Achemeneuh et coté Azure AD, j'ai bien des tentatives de connexions avec un résultat Success dans les logs de l'application Azure AD.
Merci de votre retour.

Offline

#18 2023-11-20 10:56:52

ArnBon
Member
Registered: 2022-12-17
Posts: 2

Re: Connexion GLPI avec Azure AD

Bonjour,

Lorsque je me connecte avec l'Azure Directory, voici je que je reçois,
      "User is not authorized to connect in GLPI

        Log in again"
Est-il possible que je doive créer les utilisateurs avant pour qu'ils soient reconnu dans GLPI ?

Merci

Offline

Board footer

Powered by FluxBB