Sécuriser une requête vers une API RESTfull
Bonjour, merci de me lire,
J'ai réalisé une requête http pour récupérer des données. Cette api requiert un identifiant et un mot de passe. Je veux que mes collègues entre leurs informations pour avoir accès aux données de l'api sur lesquelles ils ont des droits. Je passe donc ces données dans le header de la requête encodés en base64. Cependant cette API n'est pas interne à l'entreprise et passe par internet. Comme passer le mot de passe en clair dans le header de la requête me semble impensable, comment puis-je faire pour sécuriser cette requête ? Merci à tous.
Code de la requête :
Code:
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 53 54 55 56 57 58 59
| <?php
$username="user";
$passw="password";
$url="https://domaine.dom/api/path/to/file";
$params = array('limits' => '10', );
$header = array('Content-Type' => 'application/json');
//add the http authentication to the header
function addBasicAuth($header, $username, $password) {
$header['Authorization'] = 'Basic '.base64_encode("$username:$password");
return $header;
}
// method should be "GET", "PUT", etc..
function request($method, $url, $header, $params) {
$opts = array(
'http' => array(
'method' => $method,
),
);
// serialize the header if needed
if (!empty($header)) {
$header_str = '';
foreach ($header as $key => $value) {
$header_str .= "$key: $value\r\n";
}
$header_str .= "\r\n";
$opts['http']['header'] = $header_str;
}
// serialize the params if there are any
if (!empty($params)) {
$params_array = array();
foreach ($params as $key => $value) {
$params_array[] = "$key=$value";
}
$url .= '?'.implode('&', $params_array);
}
//create flow context with option array completed with authentication informations
$context = stream_context_create($opts);
//get content in json ($header['Content-Type']=>'application/json')
//get back content in json
$data = file_get_contents($url, false, $context);
return $data;
}
$header = addBasicAuth($header, $username, $password);
/*after we call this function we have :
$header=array('Content-Type' => 'application/json',
'Authorization' => Basic.base64("$username:$password")
);*/
$response = request("GET", $url, $header, $params);//create context, create request and launch it
echo $response; |