Authorization-Header in Apache/PHP verfügbar machen
Manchmal verschluckt Apache den Authorization-Header, bevor dieser in einer PHP-Anwendung ankommt. Insbesondere bei FastCGI-Setups (z. B. PHP-FPM) oder gewissen Apache-Modul-Konfigurationen wird der Header nicht direkt durchgereicht.
Die Folge: PHP sieht keinen Authorization-Header, und jede Bearer- oder Basic-Auth-Abfrage schlägt fehl.
Abhilfe schafft eine kleine RewriteRule in der .htaccess-Datei.
Warum wird der Header verschluckt?
Standardmäßig genügt ein Authorization: Bearer xyz oder Authorization: Basic xyz im Request, damit eine Anwendung diesen Header abfragen kann. Unter bestimmten Setups jedoch leitet Apache den Header nicht an die PHP-Umgebung weiter. Ein typisches Beispiel ist die Kombination aus Apache + PHP-FPM über FastCGI.
Der magische Einzeiler
Um sicherzustellen, dass PHP den Authorization-Header erhält, reicht in der .htaccess-Datei folgender Snippet:
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
So prüft man, ob alles funktioniert
Erstellen Sie eine PHP Datei (hier protection.php) mit folgendem Inhalt:
<?php
header('Content-Type: text/plain');
print_r(getallheaders());
// Oder:
// echo $_SERVER['HTTP_AUTHORIZATION'] ?? 'Kein Authorization-Header gefunden.';
Danach rufen Sie das Script mit hilfe von curl in einem Terminal auf:
curl -v -H "Authorization: Bearer Test123" https://ihredomain.de/protected.php
Kommt nun in der Ausgabe Authorization: Bearer Test123 vor? Dann klappt es mit der Weitergabe.
Zusammenfassung
Wenn Apache Deinen Authorization-Header nicht an PHP durchreicht, hilft meist der kleine Schnipsel in der .htaccess, der über modrewrite den Header in die Umgebungsvariable HTTPAUTHORIZATION zwängt. Damit funktioniert die Bearer- oder Basic-Auth-Abfrage wieder wie gewohnt – und spart eine große Menge an Debugging-Stress.