Authentification Frankiz

De WikiBR
Révision datée du 28 avril 2012 à 20:03 par Olivier.charvin (discussion | contributions) (Page créée avec « Pour utiliser l'authentification via frankiz il faut faire une demande au BR en précisant les données souhaitées et l'url de la page sur laquelle retournera l'utilisateur ... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

Pour utiliser l'authentification via frankiz il faut faire une demande au BR en précisant les données souhaitées et l'url de la page sur laquelle retournera l'utilisateur une fois authentifié.

Code de la page d'identification

<?php
include 'fkz_auth.php';
if(!isset($_GET['response'])){
	frankiz_do_auth();
}
$auth = frankiz_get_response();
// et voila !
// les données sont stockées dans $auth = array(key => value, ...);

Code des fonctions utilisées dans la page précédente

<?php
$FKZ_KEY = "000";//clé donnée par le BR-man contacté

function frankiz_do_auth(){
	global $FKZ_KEY;
	$timestamp = time();
	/**
	 * url de la page de login, doit correspondre *exactement* à celle entrée dans
	 * la base de données de Frankiz (définie lors de l'inscription)
	 */
	$site = 'http://example.com/login.php';
	/**
	 * Champ non utile pour l'authentification et retransmis tel quel par frankiz.
	 * Il est prévu pour pouvoir mettre en place un système de redirection après
	 * authentification, vers la page à partir de laquelle le client avait tenté de se connecter.
	 */
	$location  = '';

	$request = json_encode(array('names', 'rights', 'email', 'sport', 'promo', 'photo'));//données voulues

	$hash = md5($timestamp . $site . $FKZ_KEY . $request);

	$remote  = 'https://www.frankiz.net/remote?timestamp=' . $timestamp .
		 '&site=' . $site .
		 '&location=' . urlencode(urlencode($location)) . // il faut le faire deux fois !? à mon avis il y a un bug côté BR
		 '&hash=' . $hash .
		 '&request=' . $request;
	header("Location:" . $remote);
	exit();
}

function frankiz_get_response(){
	global $FKZ_KEY;
	// Read request
	$timestamp = (isset($_GET['timestamp']) ? $_GET['timestamp'] : 0);
	$response  = (isset($_GET['response'])  ? urldecode($_GET['response'])  : '');
	$hash	  = (isset($_GET['hash'])	  ? $_GET['hash']	  : '');
	$location  = (isset($_GET['location'])  ? $_GET['location']  : '');

	// Frankiz security protocol
	if (abs($timestamp - time()) > 600)
		die("Délai de réponse dépassé. Annulation de la requête");
	if (md5($timestamp . $FKZ_KEY . $response) != $hash)
		die("Session compromise.");

	$response = json_decode($response, true);
	$response['location'] = $location;

	// Set empty fields
	$fields = array('hruid',
		'firstname', 'lastname', 'nickname',
		'promo', 'photo', 'location');
	foreach ($fields as $k) {
		if (!isset($response[$k]))
			$response[$k] = '';
	}
	return $response;
}
?>