[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

작성자

Posted by 드리머즈

관련 글

댓글 영역