문제

내가하려는 작업 :

  • 페이지가로드 될 때 이러한 자격 증명을 입력하라는 메시지가 표시되지 않고 페이지를 보는 사람의 로그인 한 Windows 사용자 이름을 자동으로 가져 오는 회사 인트라넷에 홈페이지를 만듭니다.

  • 현재 IT 담당자가 도메인을 설정하는 데 시간이 오래 걸리기 때문에 로컬 사용자 이름을 가져 오기만하면됩니다. 예를 들어 지금 당장은 메시지없이 "(PC-Name) \ windows.user.name"을 캡처하고 싶습니다.

    환경 :

    • Windows 7 x64의 Apache 2.2.21 (생산 중이면 CentOS에 있음).

    • PHP 5.3.8 (VC9-ZTS).

    • Internet Explorer 9.0.8x 및 Firefox 6.0.2 (나중에 Chrome에 대해 걱정)

    • 현재 테스트 페이지는 print_r ($ _SERVER)를 호출하는 PHP 스크립트입니다.

    • 간단하게 유지하기 위해 테스트중인 디렉토리는 VirtualHost가 아닙니다.

      지금까지 취한 조치 :

      • SourceForge에서 mod_sspi_1.0.4-2.2.2를 다운로드하고 mod_auth_sspi.so를 Apache 모듈 디렉토리로 추출했습니다.

      • 모듈 선언 추가 :

        LoadModule sspi_auth_module modules / mod_auth_sspi.so

      • 디렉토리 정의 추가 :

        AllowOverride 없음 옵션 없음 주문 허용, 거부 모두 허용 라코 디스

      • about : config로 이동하고 network.automatic-ntlm-auth.trusted-uris를 PHP 스크립트의 절대 URL 경로로 설정 한 다음 Firefox를 다시 시작하여 Firefox에서 통합 인증을 사용하도록 설정했습니다.

      • 아직 IE에서 이에 상응하는 단계를 수행하지 않았지만 Firefox가 내부적으로 기본 지원 브라우저이므로 작동하도록하겠습니다.

      • Apache를 다시 시작하고 테스트 PHP 스크립트를로드하려고했습니다.

        결과 :

        • IE와 Firefox에서 페이지가로드되기 전에 사용자 이름과 비밀번호를 입력하라는 메시지가 표시됩니다. 나는 그 프롬프트를 원하지 않는다. 사용자 이름이 프롬프트없이 자동으로 감지되기를 원합니다.

          지금까지 문제 해결 :

          • 인증 켜기 / 끄기 및 기타 등등과 같은 다양한 SSPI 옵션을 순환 해 보았습니다. 효과가 없습니다.

          • "require valid-user"를 제거하면 더 이상 프롬프트가 나타나지 않지만 사용자 이름도 전달되지 않습니다 (NULL이 아니고 단순히 배열 기간에 설정되지 않음).

          • 메시지에서 "취소"를 누르면 표준 "인증 필요"페이지가 표시됩니다.

          • 잘못된 사용자 이름 또는 올바른 사용자 이름을 입력했지만 잘못된 비밀번호를 입력하면 페이지가로드되지만 사용자 이름은 "(PC-Name) \ Guest"가됩니다.

          • 올바른 사용자 이름 / 비밀번호를 입력하면 게스트 대신 사용자 이름이 표시됩니다.

          • IE 또는 Firefox에 사용자 이름 / 비밀번호를 입력하면 브라우저는 저장된 비밀번호 캐시를 지우거나 브라우저를 다시 시작할 때까지 후속 페이지의 사용자 이름을 기억합니다.

          • 지난 3 시간 정도 인터넷 검색과 무작위 추측을했습니다. 제로 성공. 이 질문을하는 사람들의 고립 된 포럼 게시물을 몇 개 찾았지만 답변이 없거나 이미 시도한 솔루션을 제안했지만 성공하지 못했습니다.

            다시 말하지만, 내가 원하는 것은 페이지를로드하고 프롬프트없이 현재 로그온 한 Windows 사용자 이름을 $ _SERVER 배열 출력에 표시하는 것입니다.

            내가 알 수있는 한, 이것은 Windows 구성 문제, Apache 구성 문제 또는 브라우저 구성 문제 중 하나입니다. 그 외에는 아이디어가 새로워졌습니다.

            어떤 도움을 주시면 감사하겠습니다. 감사합니다!

            -크리스

도움이 되었습니까?

해결책

며칠이 걸렸지 만 결국 스스로 알아 냈습니다. 분명히 Firefox about : config 설정을 설명하는 다양한 문서와 자습서가 잘못되었습니다. 그들은 프로토콜 접두사를 포함한 전체 URI가 포함되어야한다고 주장합니다. 밝혀진 바와 같이 정반대입니다.

어두운 곳에서 무작위로 촬영하기 위해 "localhost"(테스트 서버가 실행되는 도메인)로 설정해 보았습니다. 그리고 짜잔! 그것은 그것을 고쳤습니다! 반면에 "http : // localhost"로 인해 중단되었습니다.

Firefox에서 작동하고 서버 측 구성이 올바른지 확인한 후 IE와 Chrome에 적용하는 것이 간단했습니다. IE의 경우 "인트라넷"영역에 "http : // localhost"(이 경우 프로토콜 접두사를 원함)를 추가했습니다. Chrome은 IE에서 사용하는 것과 동일한 네트워크 설정을 사용하므로이 단계는 두 브라우저 모두에서 작동합니다.

서버 측 구성에 관한 한, 처음부터 제대로 된 것 같습니다. 그래도 약간 단순화 할 수 있었기 때문에 디렉토리 블록에 필요한 것은 다음과 같습니다. 라코 디스

이 설정에서 print_r ($ _SERVER)를 수행하는 PHP 스크립트를 가리키면 출력에 다음과 같은 내용이 포함됩니다. 라코 디스

도메인 부분 (예 : "dev-kdc-pc01 \")을 제거하려면 PHP에서 구문 분석하거나 httpd.conf의 디렉토리 블록에있는 SSPI 항목에이 줄을 추가 할 수 있습니다. 위에 언급 : 라코 디스

Apache 웹 서버가 localhost에서 실행되는 Windows 시스템에서만 테스트했습니다. 나는 Apache 서버가 Linux에서 실행되는 상황에서 아직 테스트하지 않았지만 서버가 브라우저가 보내는 것을 받아들이 기 때문에 결과에 영향을 미치지 않아야합니다. 또한 클라이언트가 Windows 또는 기타 SSPI 호환 환경을 실행 중이어야합니다. Mac을 사용하는 직원을 위해이 작업을 수행하는 방법을 아직 결정하지 않았습니다.

또한 현재 도메인이 구성되어 있지 않는 네트워크에서 성공적으로 테스트했습니다. 다른 곳에 게시 된 기사에 따르면 도메인의 구성원 인 워크 스테이션에서 동작이 동일해야합니다.

도움이 되었기를 바랍니다. 감사합니다!

다른 팁

일부 답변 일 수 있습니다. 라코 디스

http : //msdn.microsoft.com/en-us/library/windows/desktop/ms724432%28v=vs.85%29.aspx

이것을 사용하여 시스템 정보를 가져올 수있는 것 같습니다. 나머지 절반은 PERL 또는 Python을 사용하여 자동화하여 정보를 스크랩 한 다음 PHP에 게시합니다.

다음은 Windows에서 SysInfo를 가져 오는 방법에 대한 개요입니다.

http : //msdn.microsoft.com/en-us/library/windows/desktop/ms724426%28v=vs.85%29.aspx

솔직히 이것은 Linux를 사용하는 경우 PECL / PAM으로 수행하기 매우 쉬운 작업입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top