Subversion Repositories Applications.annuaire

Compare Revisions

No changes between revisions

Ignore whitespace Rev 554 → Rev 555

/trunk/jrest/services/Auth.php
78,15 → 78,15
$uri . "rafraichir",
$uri . "refresh"
),
"description" => "confirme l'authentification et la session; rafraîchit le jeton fourni (dans le cookie " . $this->nomCookie . " ou en paramètre)"
"description" => "confirme l'authentification et la session; rafraîchit le jeton fourni (dans le cookie " . $this->nomCookie . ", le header Authorization ou en paramètre)"
),
'verifierjeton' => array(
"uri" => $uri . "identite",
"uri" => $uri . "verifierjeton",
"parametres" => array(
"token" => "jeton JWT",
),
"alias" => $uri . "verifytoken",
"description" => "retourne true si le jeton fourni en paramètre est valide, une erreur sinon"
"description" => "retourne true si le jeton fourni en paramètre ou dans le header Authorization est valide, une erreur sinon"
)
)
);
111,8 → 111,6
public function getElement($ressources) {
// Achtétépéèch portouguech lolch
$this->verifierSSL();
//echo "get element\n";
//var_dump($ressources);
// le premier paramètre d'URL définit la méthode (non-magique)
if (count($ressources) > 0) {
switch ($ressources[0]) {
151,8 → 149,6
*/
public function updateElement($ressources, $pairs) {
//echo "update element\n";
//var_dump($ressources);
//var_dump($pairs);
$this->nonImplemente();
}
 
164,7 → 160,6
*/
public function createElement($pairs) {
//echo "create element\n";
//var_dump($pairs);
$this->nonImplemente();
}
 
176,7 → 171,6
*/
public function deleteElement($ressources) {
//echo "delete element\n";
//var_dump($ressources);
$this->nonImplemente();
}
 
183,7 → 177,9
/**
* Vérifie l'identité d'un utilisateur à partir de son courriel et son
* mot de passe ou d'un cookie; lui accorde un jeton et un cookie si
* tout va bien, sinon renvoie une erreur
* tout va bien, sinon renvoie une erreur et détruit le cookie
* @WARNING si vous n'utilisez pas urlencode() pour fournir le mot de passe,
* le caractère "&" posera problème en GET
*
* @param array $ressources non utilisé
*/
209,7 → 205,7
$dateDerniereModif = $util->getDateDerniereModifProfil($infos[$login]['id'], true);
$infos[$login]['dateDerniereModif'] = $dateDerniereModif;
// création du jeton
$jwt = $this->creerjeton($login, $infos[$login]);
$jwt = $this->creerJeton($login, $infos[$login]);
// création du cookie
$this->creerCookie($jwt);
// envoi
245,10 → 241,11
* header HTTP "Authorization" ou jeton valide); renvoie une erreur si le cookie
* et/ou le jeton sont expirés;
* cela permet en théorie de forger des cookies avec des jetons expirés pour se les
* faire rafraîchir franduleusement, mais le canal HTTPS fait qu'un client ne peut
* faire rafraîchir frauduleusement, mais le canal HTTPS fait qu'un client ne peut
* être en possession que de ses propres jetons... au pire on peut se faire prolonger
* à l'infini même si on n'est plus inscrit à l'annuaire... @TODO faire mieux un jour
* Priorité : cookie > headers > paramètre "token" @TODO vérifier cette stratégie
* Priorité : cookie > header "Authorization" > paramètre "token" @TODO vérifier cette
* stratégie, l'inverse est peut-être plus malin
*/
protected function identite() {
$cookieAvecJetonValide = false;
285,11 → 282,11
$jetonRetour = $this->rafraichirJeton($jwt);
} catch (Exception $e) {
// si le rafraîchissement a échoué (jeton invalide, expiré ou vide)
$erreur = "invalid or expired token in header or parameter";
$erreur = "invalid or expired token in Authorization header or parameter <token>";
}
} else {
// pas de jeton valide passé en paramètre
$erreur = ($erreur == "" ? "no token or cookie" : "invalid token in cookie / invalid or expired token in header or parameter");
$erreur = ($erreur == "" ? "no token or cookie" : "invalid token in cookie / invalid or expired token in Authorization header or parameter <token>");
}
}
// renvoi jeton
307,14 → 304,18
 
/**
* Vérifie si un jeton est valide; retourne true si oui, une erreur avec
* des détails si non
* des détails si non;
* Priorité : header "Authorization" > paramètre "token"
*/
protected function verifierJeton() {
// vérifie que le jeton provient bien d'ici,
// et qu'il est encore valide (date)
$jwt = $this->getParam('token');
if ($jwt == '') {
$this->erreur("parameter <token> required");
$jwt = $this->lireJetonDansHeader();
if ($jwt == null) {
$jwt = $this->getParam('token');
if ($jwt == '') {
$this->erreur("parameter <token> or Authorization header required");
}
}
try {
$jeton = JWT::decode($jwt, $this->clef, array('HS256'));
323,7 → 324,6
$this->erreur($e->getMessage());
exit;
}
//print_r($jeton);
$this->envoyerJson(true);
}
 
359,7 → 359,6
// vérification des infos
if (empty($infos['sub'])) {
// jeton vide (wtf?)
echo " #Jeton vide";
throw new Exception("empty token (no <sub>)");
}
// rafraîchissement
/trunk/.
Property changes:
Modified: svn:mergeinfo
Merged /branches/v1.4-baleine:r551-554