예제 #1
0
    'WEBMESTRE_COURRIEL'        => WEBMESTRE_COURRIEL,
  );
  // Initialiser la classe
  $auth = new SimpleSAML_Auth_Simple('distant-gepi-saml');
  //on forge une extension SAML pour tramsmettre l'établissement précisé dans SACoche
  $ext = array();
  if($BASE)
  {
    $dom = new DOMDocument();
    $ce = $dom->createElementNS('gepi_name_space', 'gepi_name_space:organization', $BASE);
    $ext[] = new SAML2_XML_Chunk($ce);
  }
  $auth->requireAuth( array('saml:Extensions'=>$ext) );
  // Tester si le user est authentifié, rediriger sinon
  $auth->requireAuth();
  // Récupérer l'identifiant Gepi de l'utilisateur authentifié pour le traiter dans l'application
  $attr = $auth->getAttributes();
  $login_GEPI = $attr['USER_ID_GEPI'][0];
  // Comparer avec les données de la base
  list($auth_resultat,$auth_DB_ROW) = SessionUser::tester_authentification_utilisateur( $BASE , $login_GEPI /*login*/ , FALSE /*password*/ , 'gepi' /*mode_connection*/ );
  if($auth_resultat!='ok')
  {
    exit_error( 'Incident authentification Gepi' /*titre*/ , $auth_resultat /*contenu*/ );
  }
  // Connecter l'utilisateur
  SessionUser::initialiser_utilisateur($BASE,$auth_DB_ROW);
  // Pas de redirection (passage possible d'infos en POST à conserver), on peut laisser le code se poursuivre.
  return; // Ne pas exécuter la suite de ce fichier inclus.
}

?>
예제 #2
0
 // Protection contre les attaques par force brute (laissé même pour cette page requiérant une authentification car la réponse en cas d'erreur de mdp y fait référence)
 if(!isset($_SESSION['FORCEBRUTE'][$PAGE]))
 {
   exit_json( FALSE , 'Session perdue ou absence de cookie : merci d\'actualiser la page.' );
 }
 else if( $_SERVER['REQUEST_TIME'] - $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] < $_SESSION['FORCEBRUTE'][$PAGE]['DELAI'] )
 {
   $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] = $_SERVER['REQUEST_TIME'];
   exit_json( FALSE , 'Sécurité : patienter '.$_SESSION['FORCEBRUTE'][$PAGE]['DELAI'].'s avant une nouvelle tentative.' );
 }
 // Pour un utilisateur d'établissement, y compris un administrateur
 if($login==$_SESSION['USER_LOGIN'])
 {
   exit_json( FALSE , 'Saisir les identifiants d\'un <span class="u">autre compte</span>, pas celui en cours !' );
 }
 list($auth_resultat,$auth_DB_ROW) = SessionUser::tester_authentification_utilisateur( $_SESSION['BASE'] , $login , $password , 'normal' /*mode_connection*/ );
 if($auth_resultat!='ok')
 {
   $_SESSION['FORCEBRUTE'][$PAGE]['DELAI']++;
   $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] = $_SERVER['REQUEST_TIME'];
   exit_json( FALSE , $auth_resultat );
 }
 $user_id = $auth_DB_ROW['user_id'];
 // Par sécurité et pour actualiser une éventuelle liaison (dé)faite depuis un autre compte, on ne stocke en session que l'identifiant de la clef des associations
 // La méthode appelée ci-dessous effectue de multiples vérifications complémentaires
 list( $_SESSION['USER_SWITCH_ID'] , $user_liste ) = DB_STRUCTURE_SWITCH::DB_recuperer_et_verifier_listing_comptes_associes( $_SESSION['USER_ID'] , $_SESSION['USER_SWITCH_ID'] );
 // Si le user connecté n'a pas de liaison, il faut aussi vérifier que le user de l'autre compte n'en a pas non plus
 if(!$_SESSION['USER_SWITCH_ID'])
 {
   list( $_SESSION['USER_SWITCH_ID'] , $user_liste ) = DB_STRUCTURE_SWITCH::DB_recuperer_et_verifier_listing_comptes_associes( $user_id , $_SESSION['USER_SWITCH_ID'] );
 }
예제 #3
0
}
if ($action == 'identifier') {
    // initialisation
    $auth_resultat = 'Erreur avec les données transmises !';
    // Protection contre les attaques par force brute des robots (piratage compte ou envoi intempestif de courriels)
    if (!isset($_SESSION['FORCEBRUTE'][$PAGE])) {
        exit_json(FALSE, 'Session perdue ou absence de cookie : merci d\'actualiser la page.');
    } else {
        if ($_SERVER['REQUEST_TIME'] - $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] < $_SESSION['FORCEBRUTE'][$PAGE]['DELAI']) {
            $_SESSION['FORCEBRUTE'][$PAGE]['TIME'] = $_SERVER['REQUEST_TIME'];
            exit_json(FALSE, 'Sécurité : patienter ' . $_SESSION['FORCEBRUTE'][$PAGE]['DELAI'] . 's avant une nouvelle tentative.');
        }
    }
    // 1/4 Pour un utilisateur d'établissement, y compris un administrateur
    if ($profil == 'structure' && $login != '' && $password != '') {
        list($auth_resultat, $auth_DB_ROW) = SessionUser::tester_authentification_utilisateur($BASE, $login, $password, 'normal');
        if ($auth_resultat == 'ok') {
            SessionUser::initialiser_utilisateur($BASE, $auth_DB_ROW);
        }
    } else {
        if ($profil == 'webmestre' && $login == 'webmestre' && $password != '') {
            $auth_resultat = SessionUser::tester_authentification_webmestre($password);
            if ($auth_resultat == 'ok') {
                SessionUser::initialiser_webmestre();
            }
        } else {
            if ($profil == 'developpeur' && $login == 'developpeur' && $password != '') {
                $auth_resultat = SessionUser::tester_authentification_developpeur($password);
                if ($auth_resultat == 'ok') {
                    SessionUser::initialiser_developpeur();
                }
예제 #4
0
if ($connexion_mode == 'gepi') {
    // Charger l'autoload de la librairie SimpleSAMLphp (qui ne peut être intégré de façon simple dans le _loader par un unique appel de classe (comme phpCAS).
    require CHEMIN_DOSSIER_SACOCHE . '_lib' . DS . 'SimpleSAMLphp' . DS . 'lib' . DS . '_autoload.php';
    // Mise en session d'informations dont SimpleSAMLphp a besoin ; utiliser des constantes ne va pas car Gepi fait un appel à SimpleSAMLphp en court-circuitant SACoche pour vérifier la légitimité de l'appel.
    $_SESSION['SACoche-SimpleSAMLphp'] = array('GEPI_URL' => $gepi_url, 'GEPI_RNE' => $gepi_rne, 'GEPI_CERTIFICAT_EMPREINTE' => $gepi_certificat_empreinte, 'SIMPLESAMLPHP_BASEURLPATH' => substr($_SERVER['SCRIPT_NAME'], 1, -9) . '_lib/SimpleSAMLphp/www/', 'WEBMESTRE_NOM' => WEBMESTRE_NOM, 'WEBMESTRE_PRENOM' => WEBMESTRE_PRENOM, 'WEBMESTRE_COURRIEL' => WEBMESTRE_COURRIEL);
    // Initialiser la classe
    $auth = new SimpleSAML_Auth_Simple('distant-gepi-saml');
    //on forge une extension SAML pour tramsmettre l'établissement précisé dans SACoche
    $ext = array();
    if ($BASE) {
        $dom = new DOMDocument();
        $ce = $dom->createElementNS('gepi_name_space', 'gepi_name_space:organization', $BASE);
        $ext[] = new SAML2_XML_Chunk($ce);
    }
    $auth->requireAuth(array('saml:Extensions' => $ext));
    // Tester si le user est authentifié, rediriger sinon
    $auth->requireAuth();
    // Récupérer l'identifiant Gepi de l'utilisateur authentifié pour le traiter dans l'application
    $attr = $auth->getAttributes();
    $login_GEPI = $attr['USER_ID_GEPI'][0];
    // Comparer avec les données de la base
    list($auth_resultat, $auth_DB_ROW) = SessionUser::tester_authentification_utilisateur($BASE, $login_GEPI, FALSE, 'gepi');
    if ($auth_resultat != 'ok') {
        exit_error('Incident authentification Gepi', $auth_resultat);
    }
    // Connecter l'utilisateur
    SessionUser::initialiser_utilisateur($BASE, $auth_DB_ROW);
    // Pas de redirection (passage possible d'infos en POST à conserver), on peut laisser le code se poursuivre.
    return;
    // Ne pas exécuter la suite de ce fichier inclus.
}