Я хочу создать API и аутентифицировать пользователей API, я предоставил API KEY, App-id и App-Secret. Проблема в том, что я хочу знать, откуда приходит запрос http, чтобы я мог знать, является ли Хост, делающий запрос que, зарегистрированным Хостом. Например: www.someone.com имеет app-id: 0001, app-secret: 1200 и api-key: 458. Если эти учетные данные используются для запроса A, я хочу знать, действительно ли запросчик www.someone.com
Используйте $_SERVER['HTTP_REFERER']
. Это адрес страницы (если есть), которая ссылалась на пользовательский агент на текущую страницу. Это устанавливается пользовательским агентом. Не все пользовательские агенты установят это, а некоторые предоставляют возможность изменять HTTP_REFERER
как функцию.
Для дальнейших ограничений вы можете выполнить следующее. example.com
должен быть изменен на ваш домен.
IIS приведен ниже в веб-конфигурации :
add name="Access-Control-Allow-Origin" value="http://www.example.com"
Apache установлен в httpd.conf / apache.conf
Header add Access-Control-Allow-Origin "http://www.example.com"
Как правило, этот заголовок должен выполнять эту работу. Наличие имени домена в этом заголовке
header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN'] . ""); // use domain name instead of $_SERVER['HTTP_ORIGIN'] above
но если вы хотите проверить дополнительную информацию, используйте что-то вроде следующего фрагмента
$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 }
Если пользователям необходимо передать больше данных в вашу службу, используйте POST
вместо GET
Я думаю, что вы имеете в виду, что хотите получить доступ к заголовку «Origin» в заголовках запроса (в отличие от установки его в заголовках ответов).
Для этого самым простым способом является доступ к встроенной функции getallheaders (), которая является псевдонимом для apache_request_headers () – NB, предполагается, что вы используете php в качестве модуля.
Это возвращает массив, поэтому заголовок Origin должен быть доступен следующим образом:
$request_headers = getallheaders(); $origin = $request_headers['Origin'];
Если вы используете php через что-то вроде fastcgi, то я считаю, что он будет доступен в среде – обычно с заглавной буквы и с префиксом «HTTP_», поэтому он должен быть $_SERVER['HTTP_ORIGIN']
.
Надеюсь, что это поможет кому-то еще найти это 🙂
Используя var_dump
вы можете увидеть все, что может предложить request
.
var_dump($_REQUEST);
Сделайте var_dump
на server
глобальным. Он содержит много полезной информации.
var_dump($_SERVER);