OpenAthensSP를 사용하여 잠재적으로 우리 서비스에 액세스 할 수있는 IdP 메타 데이터를 반환합니다. OpenAthensSP는 HTTP (s) 헤더의 환경 변수 형식으로이 데이터를 반환하며, PHP ($ _SERVER)에서 읽습니다.HTTP 헤더에서 long 값을 제거하는 mod_rewrite
지금까지 그렇게 좋았습니다.
그러나 mod_rewrite를 사용하여 OpenAthens에서 호출 한 URL을 다시 쓰면 메타 데이터 (즉, HTTP 헤더에 포함 된 OpenAthens의 환경 변수)가 제거됩니다. 필자는 PHP 스크립트 (메타 데이터 존재)를 직접 호출하고 동일한 PHP (메타 데이터는 제거되었지만 다른 값은 예 : 쿠키가 존재하고 변경되지 않은)로 URL을 다시 작성하는 것과 나란히 배치 된 테스트에서 이것을 보여 줬습니다. 제거 된 값은 매우 긴 값을가집니다. (너무 오랫동안 사교적으로 붙여 넣기 - 100k 이상) - 이것이 내가 볼 수있는 유일한 잠재적 인 문제입니다. 값은 올바르게 URL 인코딩됩니다.
Apache에서 LimitRequestFieldSize 및 LimitRequestLine과 같은 설정을 시도했지만 효과가 없으므로 문제가 mod_rewrite와 관련되어 있어야합니다.
그래서 질문은, 본질적으로,이다 : 아직 mod_rewrite를 사용하는 동안
가 어떻게 HTTP 헤더에 그대로 매우 긴 값을 유지 할 수 있습니까?
# /discovery is the URL called by OpenAthens to supply us IdP metadata
RewriteCond %{REQUEST_URI} ^/discovery [NC]
RewriteRule .* - [L]
# ... other rewrites here to send (nearly) everything else to index.php ...
ErrorDocument 404 /index.php
이 방법은, index.php에이 "/ 발견"요청을 수신 :
내가 가진 현재의 솔루션은 크지 않다, 나는이 (가상 호스트 섹션에서 httpd.conf 파일 조각)을 수행해야했다 그리고 $ _SERVER의 긴 값은 존재하고 정확 합니다만, 404가 트리거되지만, 말하기는 불필요하고 해킹입니다.
내가 할 수없는 것은 사용되는 PHP 프레임 워크 내에 있어야하는 로그인 폼을 채우기 위해 메타 데이터가 필요하기 때문에 OpenAthens의 출력을 유효한 페이지 (예 : discovery.php)로 직접 보내는 것입니다. index.php로 시작해야합니다.
은 (경우에 그것은 중요 :이 CentOS는 5.6에/아파치 2.2.3이다) OpenAthensSP를 사용하는 사람이 꽤, 나는 데이터가 아파치의 서브 프로세스 환경에 전달되는 것을 알다시피,
헤더에 100k? 그건 다소 우스꽝 스럽습니다 ... 헤더는 캐시되지 않습니다. 기본적으로 사용자는 모든 요청에 대해 100k의 사용자 대역폭을 낭비합니다. –
네, 다소 우스꽝 스럽지만 일을 처리하는 방법입니다 .- 다행히도 사이트에 대한 인증되지 않은 방문 (사용자 당) 당 한 번만 발생합니다. – Coder