You are not logged in.
Pages: 1
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
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
Merci encore !
Offline
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
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
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
Actif : Oui
le Client ID
le Client Secret
le scope : openid user.read email profile
l'url Authorize : https://login.microsoftonline.com/{tena … /authorize
l'url Access Token : https://login.microsoftonline.com/{tena … v2.0/token
l'url Resource Owner Details URL : https://graph.microsoft.com/v1.0/me ou https://graph.microsoft.com/v2.0/me
IsDefault : oui ou non
Authentification via Pop-up : Non
Ne pas prendre en compte le domaine pour la correspondance de l'identifiant GLPI : Non
et c'est tout.
{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
Offline
Meri Isia pour ton aide,
Cela ne fonctionne toujours pas....
Peux on entrer en contact directement sans passer par le forum ?
Merci,
Offline
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,
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
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
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
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;
}
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
Merci pour vos efforts ! Je vais tester dès que possible et vous ferai un retour
Offline
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
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
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
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
Bonjour Achemeneuh,
J'ai le meme problème, as-tu trouvé une solution ?
Offline
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/1Mon 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
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
Pages: 1