Je souhaite créer une API et authentifier les utilisateurs d’API en fournissant une clé d’API, un identifiant d’application et un secret d’application. Le problème est que je veux savoir d’où vient la requête http afin de savoir si l’hôte qui fait la demande est l’hôte enregistré. Par exemple: www.someone.com a un identifiant d’application: 0001, app-secret: 1200 et api-key: 458. Si ces informations d'identification sont utilisées pour effectuer une demande, je souhaite savoir si le demandeur est vraiment www.someone.com
Utilisez $_SERVER['HTTP_REFERER']
. C'est l'adresse de la page (le cas échéant) qui a renvoyé l'agent utilisateur à la page en cours. Ceci est défini par l'agent utilisateur. Tous les agents utilisateurs ne le définiront pas, et certains offrent la possibilité de modifier HTTP_REFERER
en tant que fonctionnalité.
Pour d'autres restrictions, vous pouvez effectuer les opérations suivantes. example.com
devrait être changé pour votre domaine.
IIS défini ci-dessous dans la configuration Web :
add name="Access-Control-Allow-Origin" value="http://www.example.com"
Apache défini ci-dessous dans httpd.conf/Apache.conf
Header add Access-Control-Allow-Origin "http://www.example.com"
Généralement, cet en-tête devrait faire l'affaire. Avoir le nom de domaine dans cet en-tête
header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_Origin'] . "");
// use domain name instead of $_SERVER['HTTP_Origin'] above
mais si vous voulez vérifier plus d'informations, utilisez quelque chose comme l'extrait suivant
$allowed = array('domain1', 'domain2', 'domain3');
if(isset($_SERVER['HTTP_Origin']) && in_array($_SERVER['HTTP_Origin'], $allowed)){
// SELECT credentials for this user account from database
if(isset($_GET['api_key'], $_GET['app_secret'])
&& $_GET['api_key'] == 'api_key_from_db'
&& $_GET['app_secret'] == 'app_secret_from_db'
){
// all fine
}else{
// not allowed
}
}else{
// not allowed
}
Si les utilisateurs doivent transmettre plus de données à votre service, utilisez POST
au lieu de GET
Je pense que ce que vous voulez dire, c'est que vous voulez accéder à l'en-tête "Origin" dans les en-têtes de requête (au lieu de le définir dans les en-têtes de réponse).
Pour cela, le moyen le plus simple consiste à accéder à getallheaders () function - qui est un alias pour Apache_request_headers () - N.B. cela suppose que vous utilisez php en tant que module.
Cela retourne un tableau, donc l'en-tête Origin devrait être disponible comme ceci:
$request_headers = getallheaders();
$Origin = $request_headers['Origin'];
Si vous utilisez php via quelque chose comme fastcgi, alors je pense qu’il serait rendu disponible dans l’environnement - généralement en majuscule et préfixé par "HTTP_", ce qui devrait être $_SERVER['HTTP_Origin']
.
J'espère que cela aidera tous ceux qui cherchent ça :)
En utilisant un var_dump
, vous pouvez voir tout ce que la request
a à offrir.
var_dump($_REQUEST);
Faites un var_dump
sur le server
global également. Il contient beaucoup d'informations utiles.
var_dump($_SERVER);
Laravel 5 : contrôleur de méthode de requête:
$Origin = request()->headers->get('Origin');