Skip to content
Extraits de code Groupes Projets
Valider 041212aa rédigé par cerdic's avatar cerdic
Parcourir les fichiers

3 methodes supplementaires dans l'api inc/auth :

auth_url_retour_login() fournit une url securisee pour retour apres identification chez un sso
auth_terminer_identifier_login() appelee au retour sur l'url precedente finit l'identification apres le retour du sso
auth_loger() loge un auteur decrit par son tableau

action/auth gere le retour depuis un SSO

la fonction charger du formulaire de login() retrouve aussi le login si on est identifie mais sans cookie admin, et lance dans ce cas la redirection necessaire 
parent 24c7af17
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -4,6 +4,7 @@ config/ecran_securite.php -text ...@@ -4,6 +4,7 @@ config/ecran_securite.php -text
config/remove.txt -text config/remove.txt -text
ecrire/action/acceder_document.php -text ecrire/action/acceder_document.php -text
ecrire/action/activer_plugins.php -text ecrire/action/activer_plugins.php -text
ecrire/action/auth.php -text
ecrire/action/changer_mode_document.php -text ecrire/action/changer_mode_document.php -text
ecrire/action/charger_plugin.php -text ecrire/action/charger_plugin.php -text
ecrire/action/configurer.php -text ecrire/action/configurer.php -text
......
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2009 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
/**
* Retour d'authentification pour les SSO
*/
function action_auth_dist() {
$securiser_action = charger_fonction('securiser_action', 'inc');
$arg = $securiser_action();
if (!preg_match(",^(\w+)[/](.+)$,", $arg, $r)) {
spip_log("action_auth_dist $arg pas compris");
}
else {
$auth_methode = $r[1];
$login = $r[2];
include_spip('inc/auth');
$res = auth_terminer_identifier_login($auth_methode, $login);
if (is_string($res)){ // Erreur
$redirect = _request('redirect');
$redirect = parametre_url($redirect,'var_erreur',$res);
include_spip('inc/headers');
redirige_par_entete($redirect);
}
// sinon on loge l'auteur identifie, et on finit (redirection automatique)
auth_loger($res);
}
}
?>
\ No newline at end of file
...@@ -295,6 +295,7 @@ function auth_trace($row, $date=null) ...@@ -295,6 +295,7 @@ function auth_trace($row, $date=null)
} }
} }
/** ---------------------------------------------------------------------------- /** ----------------------------------------------------------------------------
* API Authentification, gestion des identites centralisees * API Authentification, gestion des identites centralisees
*/ */
...@@ -337,6 +338,7 @@ function auth_formulaire_login($flux){ ...@@ -337,6 +338,7 @@ function auth_formulaire_login($flux){
* qui sera alors converti en login interne apres verification * qui sera alors converti en login interne apres verification
* *
* @param string $login * @param string $login
* @param string $serveur
* @return string/bool * @return string/bool
*/ */
function auth_retrouver_login($login, $serveur=''){ function auth_retrouver_login($login, $serveur=''){
...@@ -364,6 +366,7 @@ function auth_retrouver_login($login, $serveur=''){ ...@@ -364,6 +366,7 @@ function auth_retrouver_login($login, $serveur=''){
* N'y aurait-il pas plus simple ? * N'y aurait-il pas plus simple ?
* *
* @param string $login * @param string $login
* @param string $serveur
* @return array * @return array
*/ */
function auth_informer_login($login, $serveur=''){ function auth_informer_login($login, $serveur=''){
...@@ -398,8 +401,7 @@ function auth_informer_login($login, $serveur=''){ ...@@ -398,8 +401,7 @@ function auth_informer_login($login, $serveur=''){
* *
* @param string $login * @param string $login
* @param string $password * @param string $password
* @param string $md5pass * @param string $serveur
* @param string $md5next
* @return mixed * @return mixed
*/ */
function auth_identifier_login($login, $password, $serveur=''){ function auth_identifier_login($login, $password, $serveur=''){
...@@ -419,11 +421,61 @@ function auth_identifier_login($login, $password, $serveur=''){ ...@@ -419,11 +421,61 @@ function auth_identifier_login($login, $password, $serveur=''){
return $erreur; return $erreur;
} }
/**
* Fournir une url de retour apres login par un SSO
* pour finir l'authentification
*
* @param string $auth_methode
* @param string $login
* @param string $serveur
* @return string
*/
function auth_url_retour_login($auth_methode, $login, $redirect='', $serveur=''){
$securiser_action = charger_fonction('securiser_action','inc');
return $securiser_action('auth', "$auth_methode/$login", $redirect, true);
}
function auth_terminer_identifier_login($auth_methode, $login, $serveur=''){
$args = func_get_args();
$auteur = auth_administrer('terminer_identifier_login',$args);
return $auteur;
}
/**
* Loger un auteur suite a son identification
*
* @param array $auteur
*/
function auth_loger($auteur){
if (!is_array($auteur) OR !count($auteur))
return false;
$session = charger_fonction('session', 'inc');
$session($auteur);
$p = ($auteur['prefs']) ? unserialize($auteur['prefs']) : array();
$p['cnx'] = ($session_remember == 'oui') ? 'perma' : '';
$p = array('prefs' => serialize($p));
sql_updateq('spip_auteurs', $p, "id_auteur=" . $auteur['id_auteur']);
// Si on est admin, poser le cookie de correspondance
if ($auteur['statut'] == '0minirezo') {
include_spip('inc/cookie');
spip_setcookie('spip_admin', '@'.$auteur['login'],
time() + 7 * 24 * 3600);
}
// bloquer ici le visiteur qui tente d'abuser de ses droits
verifier_visiteur();
return true;
}
/** /**
* Tester la possibilite de modifier le login d'authentification * Tester la possibilite de modifier le login d'authentification
* pour la methode donnee * pour la methode donnee
* *
* @param string $auth_methode * @param string $auth_methode
* @param string $serveur
* @return bool * @return bool
*/ */
function auth_autoriser_modifier_login($auth_methode, $serveur=''){ function auth_autoriser_modifier_login($auth_methode, $serveur=''){
...@@ -438,6 +490,7 @@ function auth_autoriser_modifier_login($auth_methode, $serveur=''){ ...@@ -438,6 +490,7 @@ function auth_autoriser_modifier_login($auth_methode, $serveur=''){
* @param string $auth_methode * @param string $auth_methode
* @param string $new_login * @param string $new_login
* @param int $id_auteur * @param int $id_auteur
* @param string $serveur
* @return string * @return string
* message d'erreur ou chaine vide si pas d'erreur * message d'erreur ou chaine vide si pas d'erreur
*/ */
...@@ -452,6 +505,7 @@ function auth_verifier_login($auth_methode, $new_login, $id_auteur=0, $serveur=' ...@@ -452,6 +505,7 @@ function auth_verifier_login($auth_methode, $new_login, $id_auteur=0, $serveur='
* @param string $auth_methode * @param string $auth_methode
* @param string $new_login * @param string $new_login
* @param int $id_auteur * @param int $id_auteur
* @param string $serveur
* @return bool * @return bool
*/ */
function auth_modifier_login($auth_methode, $new_login, $id_auteur, $serveur=''){ function auth_modifier_login($auth_methode, $new_login, $id_auteur, $serveur=''){
...@@ -464,6 +518,7 @@ function auth_modifier_login($auth_methode, $new_login, $id_auteur, $serveur='') ...@@ -464,6 +518,7 @@ function auth_modifier_login($auth_methode, $new_login, $id_auteur, $serveur='')
* pour la methode donnee * pour la methode donnee
* *
* @param string $auth_methode * @param string $auth_methode
* @param string $serveur
* @return bool * @return bool
* succes ou echec * succes ou echec
*/ */
...@@ -480,6 +535,7 @@ function auth_autoriser_modifier_pass($auth_methode, $serveur=''){ ...@@ -480,6 +535,7 @@ function auth_autoriser_modifier_pass($auth_methode, $serveur=''){
* @param string $login * @param string $login
* @param string $new_pass * @param string $new_pass
* @param int $id_auteur * @param int $id_auteur
* @param string $serveur
* @return string * @return string
* message d'erreur ou chaine vide si pas d'erreur * message d'erreur ou chaine vide si pas d'erreur
*/ */
...@@ -496,6 +552,7 @@ function auth_verifier_pass($auth_methode, $login, $new_pass, $id_auteur=0, $ser ...@@ -496,6 +552,7 @@ function auth_verifier_pass($auth_methode, $login, $new_pass, $id_auteur=0, $ser
* @param string $login * @param string $login
* @param string $new_pass * @param string $new_pass
* @param int $id_auteur * @param int $id_auteur
* @param string $serveur
* @return bool * @return bool
* succes ou echec * succes ou echec
*/ */
...@@ -513,6 +570,7 @@ function auth_modifier_pass($auth_methode, $login, $new_pass, $id_auteur, $serve ...@@ -513,6 +570,7 @@ function auth_modifier_pass($auth_methode, $login, $new_pass, $id_auteur, $serve
* @param int $id_auteur * @param int $id_auteur
* @param array $champs * @param array $champs
* @param array $options * @param array $options
* @param string $serveur
* @return void * @return void
*/ */
function auth_synchroniser_distant($auth_methode=true, $id_auteur=0, $champs=array(), $options = array(), $serveur=''){ function auth_synchroniser_distant($auth_methode=true, $id_auteur=0, $champs=array(), $options = array(), $serveur=''){
...@@ -531,6 +589,13 @@ function auth_synchroniser_distant($auth_methode=true, $id_auteur=0, $champs=arr ...@@ -531,6 +589,13 @@ function auth_synchroniser_distant($auth_methode=true, $id_auteur=0, $champs=arr
} }
/**
*
* @param string $login
* @param string $pw
* @param string $serveur
* @return array
*/
function lire_php_auth($login, $pw, $serveur=''){ function lire_php_auth($login, $pw, $serveur=''){
// en auth php, le login est forcement celui en base // en auth php, le login est forcement celui en base
// pas la peine de passer par la methode auth/xxx pour identifier le login // pas la peine de passer par la methode auth/xxx pour identifier le login
...@@ -552,10 +617,16 @@ function lire_php_auth($login, $pw, $serveur=''){ ...@@ -552,10 +617,16 @@ function lire_php_auth($login, $pw, $serveur=''){
return false; return false;
} }
// /**
// entete php_auth (est-encore utilise ?) * entete php_auth (est-encore utilise ?)
// *
// http://doc.spip.org/@ask_php_auth * @param <type> $pb
* @param <type> $raison
* @param <type> $retour
* @param <type> $url
* @param <type> $re
* @param <type> $lien
*/
function ask_php_auth($pb, $raison, $retour, $url='', $re='', $lien='') { function ask_php_auth($pb, $raison, $retour, $url='', $re='', $lien='') {
@Header("WWW-Authenticate: Basic realm=\"espace prive\""); @Header("WWW-Authenticate: Basic realm=\"espace prive\"");
@Header("HTTP/1.0 401 Unauthorized"); @Header("HTTP/1.0 401 Unauthorized");
......
...@@ -24,6 +24,11 @@ function formulaires_login_charger_dist($cible="",$login="",$prive=null) ...@@ -24,6 +24,11 @@ function formulaires_login_charger_dist($cible="",$login="",$prive=null)
$erreur = _request('var_erreur'); $erreur = _request('var_erreur');
if (!$login) $login = _request('var_login'); if (!$login) $login = _request('var_login');
// si on est deja identifie
if (!$login AND isset($GLOBALS['visiteur_session']['login'])) {
$login = $GLOBALS['visiteur_session']['login'];
}
// ou si on a un cookie admin
if (!$login) { if (!$login) {
if (isset($_COOKIE['spip_admin']) if (isset($_COOKIE['spip_admin'])
AND preg_match(",^@(.*)$,", $_COOKIE['spip_admin'], $regs)) AND preg_match(",^@(.*)$,", $_COOKIE['spip_admin'], $regs))
...@@ -55,7 +60,9 @@ function formulaires_login_charger_dist($cible="",$login="",$prive=null) ...@@ -55,7 +60,9 @@ function formulaires_login_charger_dist($cible="",$login="",$prive=null)
if (is_null($prive) ? is_url_prive($cible) : $prive) { if (is_null($prive) ? is_url_prive($cible) : $prive) {
include_spip('inc/autoriser'); include_spip('inc/autoriser');
$loge = autoriser('ecrire'); $loge = autoriser('ecrire');
} else $loge = ($GLOBALS['visiteur_session']['auth'] != ''); }
else
$loge = ($GLOBALS['visiteur_session']['auth'] != '');
// Si on est connecte, appeler traiter() // Si on est connecte, appeler traiter()
// et lancer la redirection si besoin // et lancer la redirection si besoin
...@@ -113,8 +120,13 @@ function formulaires_login_verifier_dist($cible="",$login="",$prive=null){ ...@@ -113,8 +120,13 @@ function formulaires_login_verifier_dist($cible="",$login="",$prive=null){
array('login' => htmlspecialchars($login)))); array('login' => htmlspecialchars($login))));
} }
// appeler auth_identifier_login qui va :
// - renvoyer un string si echec (message d'erreur)
// - un array decrivant l'auteur identifie si possible
// - rediriger vers un SSO qui renverra in fine sur action/auth qui finira l'authentification
include_spip('inc/auth'); include_spip('inc/auth');
$auteur = auth_identifier_login($session_login, $session_password); $auteur = auth_identifier_login($session_login, $session_password);
// on arrive ici si on ne s'est pas identifie avec un SSO
if (!is_array($auteur)) { if (!is_array($auteur)) {
$erreurs = array(); $erreurs = array();
if (is_string($auteur)) if (is_string($auteur))
...@@ -134,14 +146,8 @@ function formulaires_login_verifier_dist($cible="",$login="",$prive=null){ ...@@ -134,14 +146,8 @@ function formulaires_login_verifier_dist($cible="",$login="",$prive=null){
// en gerant la duree demandee pour son cookie // en gerant la duree demandee pour son cookie
if ($session_remember !== NULL) if ($session_remember !== NULL)
$auteur['cookie'] = $session_remember; $auteur['cookie'] = $session_remember;
$session = charger_fonction('session', 'inc'); auth_loger($auteur);
$session($auteur);
$p = ($auteur['prefs']) ? unserialize($auteur['prefs']) : array();
$p['cnx'] = ($session_remember == 'oui') ? 'perma' : '';
$p = array('prefs' => serialize($p));
sql_updateq('spip_auteurs', $p, "id_auteur=" . $auteur['id_auteur']);
// bloquer ici le visiteur qui tente d'abuser de ses droits
verifier_visiteur();
return (is_null($prive) ? is_url_prive($cible) : $prive) return (is_null($prive) ? is_url_prive($cible) : $prive)
? login_autoriser() : array(); ? login_autoriser() : array();
} }
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter