EntraID gestion des utilisateurs invités

Installation & Configuration du logiciel
fabrice
Gsup LEVEL 7
Messages : 389
Enregistré le : mar. 11 mars 2014 12:01

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
fabrice
Gsup LEVEL 7
Messages : 389
Enregistré le : mar. 11 mars 2014 12:01

Bonjour Flox,
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
Répondre