web-dev-qa-db-fra.com

En-tête d'autorisation manquant dans PHP POST demande

J'essaie actuellement de lire l'en-tête d'autorisation dans un script PHP que j'appelle avec une demande POST. L'en-tête d'autorisation est rempli avec un jeton. Il semble que l'en-tête Authorization soit en quelque sorte supprimé avant d'arriver à mon script PHP. J'exécute la demande de publication avec Postman (addon Chrome) et j'ai activé CORS dans mon script PHP. Je n'ai pas directement accès au serveur Apache.

Requête HTTP:

Accept:*/*
Accept-Encoding:gzip,deflate
Accept-Language:de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4,ja;q=0.2
Authorization:Bearer mytoken
Cache-Control:no-cache
Connection:keep-alive
Content-Length:32
Content-Type:text/plain;charset=UTF-8
Host:www.myhost.com
Origin:chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
 User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)       
 Chrome/38.0.2125.104 Safari/537.36

Script PHP:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type,      Accept");
header("Content-Type: application/json");

$headers = getallheaders();
echo $headers['Authorization'];

Le script ci-dessus génère '' (= rien).

20
jimmy

Après un certain temps, nous avons trouvé une solution à ce problème. L’en-tête d’autorisation a été enlevé et, en ajoutant les lignes suivantes dans mon fichier .htaccess, j’ai réussi à le faire fonctionner.

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
68
jimmy

Le tableau ci-dessous contient les en-têtes de requête, qui peuvent être manquants dans la variable $ _SERVER. 

$headers = Apache_request_headers();

(Cela est particulièrement vrai pour l'en-tête ajax 'HTTP_X_REQUESTED_WITH', qui se trouve de cette manière sous la forme: $headers['X_REQUESTED_WITH']

2
Grigoreas P.

Je ne sais pas pourquoi ma version 5.4.45 de PHP fonctionnant sous NGINX refusait tout en-tête personnalisé contenant des traits de soulignement:

ACCEPTÉ: CURLOPT_HTTPHEADER => array ('Autorisation: 123456')

REFUSÉ: CURLOPT_HTTPHEADER => array ('my_Authorization: 123456')

J'espère que ça peut aider quelqu'un. À votre santé

0
luciomonter

Je devais d'abord ajouter ceci à mon fichier de configuration Apache des machines: 

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

Pour Linux dans /etc/Apache2/Apache2.conf

Pour Mac (avec Homebrew) dans /usr/local/etc/httpd/httpd.conf

Ajouter ceci à .htaccess n'a pas fonctionné pour une raison quelconque:

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
0
Tech Nomad