[php/apache] Authorization Header가 빠질 때 해결 방법
프로그래밍/서버2020. 2. 8. 02:02
php에선.. 서버로 전달된 request의 header를 구하기 위해선 아래의 2가지 방법을 사용할 수 있습니다.
$headers = apache_request_headers();
$headers = getallheaders();
$headers는 배열이 되는데
$headers['Authorization']
와 같이.. 헤더에 담긴 데이터를 접근할 수 있습니다.
그런데 여러 테스트를 해봐도.. 신기하게도 Authorization 값만.. 빠지더라구요.
스택 오버플로우를 찾아보니
.htaccess에
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
의 코드를 추가하면 된다고 되어있었습니다.
그런데 .htaccess가 어디있는지 안보이고.. 대신에 httpd.conf의 가장 마지막 줄에 위 코드를 넣어봤는데.. 효과가 없었습니다.
서버 재시작 해도 효과가 없더라구요..
해결책은.. 아래와 같습니다.
/opt/bitnami/apache2/conf/httpd.conf의 가장 마지막 줄에 아래의 코드를 추가해주세요.
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
그리고 서버 재시작을 해주세요.
sudo /opt/bitnami/ctlscript.sh restart apache
그러면.. 바로.. Authorization이 빠지지 않고 나옵니다..
원인은.. 좀 더 조사가 필요하긴 하지만.. apache에서 CGI/Fast CGI를 사용하는 경우 보안상의 이유로 authorization header를 php 스크립트로 보내지 않는다고 하네요..
참고:
https://stackoverflow.com/questions/26475885/authorization-header-missing-in-php-post-request
https://support.deskpro.com/en/kb/articles/missing-authorization-headers-with-apache
댓글 영역