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,15 → 304,19 |
|
/** |
* 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->lireJetonDansHeader(); |
if ($jwt == null) { |
$jwt = $this->getParam('token'); |
if ($jwt == '') { |
$this->erreur("parameter <token> required"); |
$this->erreur("parameter <token> or Authorization header required"); |
} |
} |
try { |
$jeton = JWT::decode($jwt, $this->clef, array('HS256')); |
$jeton = (array) $jeton; |
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 |