Comment peut-on limiter à recevoir des données par mon webservice ?

En fait, j'ai un webservice et je veux que seulement les utilisateurs qui ont une clé puissent envoyer les données ?

Par exemple, je donne à un utilisateur une clé (SHA-256 hash) :
1c3b1d8197bc20ccc11e391cabd2c7576fe1b4aeb6e0d3607ddf22725164faa9

qui correspond :
"ma cle tres secrète pour je porte mes converses tu l as cru patate crue"

ensuite, il me l'envoie par le web service :
par exemple :

$url = 'http://127.0.0.42/api/lookup/1c3b1d8197bc20ccc11e391cabd2c7576fe1b4aeb6e0d3607ddf22725164faa9/donnesdata/

Comment puis-je vérifier si je peux traiter les données de cette utilisatrice qui a la bonne clé (ou non) ?

Voici j'ai fait 2 solutions :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
$cleVenu = '1c3b1d8197bc20ccc11e391cabd2c7576fe1b4aeb6e0d3607ddf22725164faa9';
$parole = 'ma cle tres secrete pour je porte mes converses tu l as cru patate crue';
 
 
//SHA-256 hash -- > sha256
$cleHash =  hash_hmac('sha256', $parole, 'secret');
 
 
echo '<h1>1ere solution</h1>';
 
if ($cleHash === $cleVenu)
{
	echo '<p>bonne clé</p>';
	// donc: on traite les informations reçues
}
else
{
	echo '<p>mauvaise clé</p>';
	//On ne traite pas cette demande
}
 
 
echo '<h1>2e solution</h1>';
function comparer_2cle_hache($cle1er, $cleOrigine) { 
 
	$longeur = strlen($cle1er); 
	if ($longeur !== strlen($cleOrigine)) { 
		return false; 
	} 
 
	//comparer le code ASCII 
	$status = 0; 
	for ($i = 0; $i < $longeur; $i++) { 
		$status |= ord($cle1er[$i]) ^ ord($cleOrigine[$i]); 
	} 
	return $status === 0;
 
	if (!is_string($cle1er) || !is_string($cleOrigine)) { 
		return false; 
	} 
}
 
if (comparer_2cle_hache($cleVenu,hash_hmac('sha256', $parole, 'secret')))
{
	echo '<p>bonne clé par 2e</p>';
	// alors: on traite les informations reçues
}
else
{
	echo '<p>mauvaise clé</p>';
	//(die('désolé)
}
Est-ce que vous en avez une autre plus performante?
Sinon, Quelle solution est meilleure parmi les miennes ?


Merci