EntraID gestion des utilisateurs invités
Bonjour Flox,
pour que ça fonctionne j'ai du modifier le script de azure_ad_auth.php comme ceci :
pour que ça fonctionne j'ai du modifier le script de azure_ad_auth.php comme ceci :
Code : Tout sélectionner
<?php
################################################################################################
# @Name : azure_ad_auth.php
# @Description : Version Finale Corrigée - Gestion des variables et Proxy
# @Update : 29/01/2026
################################################################################################
// 1. Diagnostic
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require_once('connect.php');
require_once('core/functions.php');
// Connexion DB et récupération des paramètres AVANT toute utilisation
$db->exec('SET sql_mode = ""');
$qry=$db->prepare("SELECT * FROM `tparameters` LIMIT 1");
$qry->execute();
$parameters=$qry->fetch();
$qry->closeCursor();
$qry=$db->prepare("SELECT * FROM `tentra_tenant` WHERE `id`='1'");
$qry->execute();
$tenant=$qry->fetch();
$qry->closeCursor();
// Vérification que les paramètres sont chargés
if (!$parameters || !$tenant) {
exit("Erreur : Impossible de charger les paramètres depuis la base de données.");
}
if(preg_match('/gs_en/',$tenant['client_secret'])) {
$tenant['client_secret']=gs_crypt($tenant['client_secret'], 'd' , $parameters['server_private_key']);
}
// 2. Gestion session Proxy (Indispensable pour éviter la boucle)
if (session_status() === PHP_SESSION_NONE) {
session_set_cookie_params([
'secure' => true,
'httponly' => true,
'samesite' => 'None'
]);
session_start();
}
// 3. Logique d'authentification
if($parameters['azure_ad_sso'] && !isset($_SESSION['user_id'])) {
require_once 'vendor/autoload.php';
$provider = new TheNetworg\OAuth2\Client\Provider\Azure([
'clientId' => $tenant['client_id'],
'clientSecret' => $tenant['client_secret'],
'redirectUri' => $parameters['server_url'].'/azure_ad_auth.php',
'urlAPI' => 'https://graph.microsoft.com/v1.0/',
'resource' => 'https://graph.microsoft.com/'
]);
if (!isset($_GET['code'])) {
$authUrl = $provider->getAuthorizationUrl();
$_SESSION['oauth2state'] = $provider->getState();
header('Location: '.$authUrl);
exit;
} else {
try {
$token = $provider->getAccessToken('authorization_code', [
'code' => $_GET['code'],
'resource' => 'https://graph.microsoft.com/'
]);
$me = $provider->get("me", $token);
$azure_id = $me['id'];
$azure_mail = $me['mail'] ?? $me['userPrincipalName'];
// Recherche utilisateur (ID Azure ou Mail)
$qry=$db->prepare("SELECT id FROM tusers WHERE (azure_ad_id=:azid OR mail=:mail) AND disable='0' LIMIT 1");
$qry->execute(['azid' => $azure_id, 'mail' => $azure_mail]);
$gs_user=$qry->fetch();
$qry->closeCursor();
if($gs_user) {
$gs_token = bin2hex(random_bytes(32));
$db->prepare("INSERT INTO ttoken (date,token,action,user_id) VALUES (NOW(),?,'azure_auth',?)")
->execute([$gs_token, $gs_user['id']]);
header('Location: '.$parameters['server_url'].'/index.php?auth_token='.$gs_token);
exit;
} else {
echo "<h2>Utilisateur reconnu par Microsoft mais absent de GestSup</h2>";
echo "Email : " . htmlspecialchars($azure_mail) . "<br>";
echo "ID Azure : " . htmlspecialchars($azure_id) . "<br>";
exit("<hr>Vérifiez que cet ID est bien renseigné dans la fiche utilisateur sur GestSup.");
}
} catch (Exception $e) {
// Anti-boucle : si le code est expiré ou invalide, on relance proprement
if (strpos($e->getMessage(), 'invalid_grant') !== false) {
header('Location: '.$parameters['server_url'].'/azure_ad_auth.php');
exit;
}
exit('Erreur critique API : '.$e->getMessage());
}
}
} else {
// Si déjà connecté ou SSO désactivé, retour à l'index
header('Location: index.php');
exit;
}
?>OS:Linuxgestsup4.15.0-213-generic#224-
MariaDB:10.4.31-MariaDB-1:10.4.31+maria~ubu1804(base:bsup5245.5Mo)
PHP:8.2.6(/etc/php/8.2/apache2/php.ini)
GestSup:3.2.52
MariaDB:10.4.31-MariaDB-1:10.4.31+maria~ubu1804(base:bsup5245.5Mo)
PHP:8.2.6(/etc/php/8.2/apache2/php.ini)
GestSup:3.2.52
