2012-11-19 3 views
0

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를 사용하는 사람이 꽤, 나는 데이터가 아파치의 서브 프로세스 환경에 전달되는 것을 알다시피,

+0

헤더에 100k? 그건 다소 우스꽝 스럽습니다 ... 헤더는 캐시되지 않습니다. 기본적으로 사용자는 모든 요청에 ​​대해 100k의 사용자 대역폭을 낭비합니다. –

+0

네, 다소 우스꽝 스럽지만 일을 처리하는 방법입니다 .- 다행히도 사이트에 대한 인증되지 않은 방문 (사용자 당) 당 한 번만 발생합니다. – Coder

답변

0

하지 HTTP 헤더 - 결코 사용자의 클라이언트로 이동하지 않습니다. 또한 LimitRequestFieldSize 및 LimitRequestLine이 HTTP 요청 헤더에만 적용되는 이유에 대해 설명합니다. 무슨 일이 일어나고 있는지 재 작성 규칙이 어떤 식 으로든 요청을 방해하고있는 것 같아요. 내부 요청을 작성하는 경우 $ _SERVER 변수를 사용하는 대신 PHP에서 apache_getenv 함수를 사용하는 것이 더 좋습니다.

+0

맞습니다. mod_rewrite는 내부적으로 동의하지 않는 것 같습니다. Eduserv의 개발자도 Apache 하위 프로세스 환경을 비난하고 mod_rewrite를 사용하지 말 것을 권장합니다 (옵션이 아니라 SP가 어쨌든 그것을 사용합니다!). SP는 (mod_rewrite ...!를 통해) SP가 처리하는/oa/idp_data에서 동일한 검색 정보를 사용할 수있게 해주고 PHP에서 쉽게 구문 분석하고 진행할 수있는 XML 문서에 필요한 정보를 생성합니다. – Coder

관련 문제