Subversion Repositories Applications.annuaire

Rev

Rev 553 | Rev 556 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 553 Rev 554
Line 76... Line 76...
76
					"alias" => array(
76
					"alias" => array(
77
						$uri . "identity",
77
						$uri . "identity",
78
						$uri . "rafraichir",
78
						$uri . "rafraichir",
79
						$uri . "refresh"
79
						$uri . "refresh"
80
					),
80
					),
81
					"description" => "confirme l'authentification et la session; rafraîchit le jeton fourni (dans le cookie " . $this->nomCookie . " ou en paramètre)"
81
					"description" => "confirme l'authentification et la session; rafraîchit le jeton fourni (dans le cookie " . $this->nomCookie . ", le header Authorization ou en paramètre)"
82
				),
82
				),
83
				'verifierjeton' => array(
83
				'verifierjeton' => array(
84
					"uri" => $uri . "verifierjeton",
84
					"uri" => $uri . "verifierjeton",
85
					"parametres" => array(
85
					"parametres" => array(
86
						"token" => "jeton JWT",
86
						"token" => "jeton JWT",
87
					),
87
					),
88
					"alias" => $uri . "verifytoken",
88
					"alias" => $uri . "verifytoken",
89
					"description" => "retourne true si le jeton fourni en paramètre est valide, une erreur sinon"
89
					"description" => "retourne true si le jeton fourni en paramètre ou dans le header Authorization est valide, une erreur sinon"
90
				)
90
				)
91
			)
91
			)
92
		);
92
		);
93
		$this->envoyerJson($infos);
93
		$this->envoyerJson($infos);
94
	}
94
	}
Line 239... Line 239...
239
	 * Renvoie un jeton rafraîchi (durée de validité augmentée de $this->dureeJeton
239
	 * Renvoie un jeton rafraîchi (durée de validité augmentée de $this->dureeJeton
240
	 * si l'utilisateur est reconnu comme détenteur d'une session active (cookie valide,
240
	 * si l'utilisateur est reconnu comme détenteur d'une session active (cookie valide,
241
	 * header HTTP "Authorization" ou jeton valide); renvoie une erreur si le cookie
241
	 * header HTTP "Authorization" ou jeton valide); renvoie une erreur si le cookie
242
	 * et/ou le jeton sont expirés;
242
	 * et/ou le jeton sont expirés;
243
	 * cela permet en théorie de forger des cookies avec des jetons expirés pour se les
243
	 * cela permet en théorie de forger des cookies avec des jetons expirés pour se les
244
	 * faire rafraîchir franduleusement, mais le canal HTTPS fait qu'un client ne peut
244
	 * faire rafraîchir frauduleusement, mais le canal HTTPS fait qu'un client ne peut
245
	 * être en possession que de ses propres jetons... au pire on peut se faire prolonger
245
	 * être en possession que de ses propres jetons... au pire on peut se faire prolonger
246
	 * à l'infini même si on n'est plus inscrit à l'annuaire... @TODO faire mieux un jour
246
	 * à l'infini même si on n'est plus inscrit à l'annuaire... @TODO faire mieux un jour
247
	 * Priorité : cookie > headers > paramètre "token" @TODO vérifier cette stratégie, l'inverse
247
	 * Priorité : cookie > header "Authorization" > paramètre "token" @TODO vérifier cette
248
	 * est peut-être plus malin
248
	 * stratégie, l'inverse est peut-être plus malin
249
	 */
249
	 */
250
	protected function identite() {
250
	protected function identite() {
251
		$cookieAvecJetonValide = false;
251
		$cookieAvecJetonValide = false;
252
		$jetonRetour = null;
252
		$jetonRetour = null;
253
		$erreur = '';
253
		$erreur = '';
Line 302... Line 302...
302
		}
302
		}
303
	}
303
	}
Line 304... Line 304...
304
 
304
 
305
	/**
305
	/**
306
	 * Vérifie si un jeton est valide; retourne true si oui, une erreur avec
306
	 * Vérifie si un jeton est valide; retourne true si oui, une erreur avec
-
 
307
	 * des détails si non;
307
	 * des détails si non
308
	 * Priorité : header "Authorization" > paramètre "token"
308
	 */
309
	 */
309
	protected function verifierJeton() {
310
	protected function verifierJeton() {
310
		// vérifie que le jeton provient bien d'ici,
311
		// vérifie que le jeton provient bien d'ici,
311
		// et qu'il est encore valide (date)
312
		// et qu'il est encore valide (date)
312
		$jwt = $this->getParam('token');
313
		$jwt = $this->lireJetonDansHeader();
313
		if ($jwt == '') {
314
		if ($jwt == null) {
314
			$jwt = $this->lireJetonDansHeader();
315
			$jwt = $this->getParam('token');
315
			if ($jwt == null) {
316
			if ($jwt == '') {
316
				$this->erreur("parameter <token> or Authorization header required");
317
				$this->erreur("parameter <token> or Authorization header required");
317
			}
318
			}
318
		}
319
		}
319
		try {
320
		try {
320
			$jeton = JWT::decode($jwt, $this->clef, array('HS256'));
321
			$jeton = JWT::decode($jwt, $this->clef, array('HS256'));
321
			$jeton = (array) $jeton;
322
			$jeton = (array) $jeton;
322
		} catch (Exception $e) {
323
		} catch (Exception $e) {
323
			$this->erreur($e->getMessage());
324
			$this->erreur($e->getMessage());
324
			exit;
325
			exit;
325
		}
-
 
326
		//print_r($jeton);
326
		}
327
		$this->envoyerJson(true);
327
		$this->envoyerJson(true);
Line 328... Line 328...
328
	}
328
	}
329
 
329