2016-07-04 2 views
0

Laravel/Lumen Shield Extension을 Http 인증에 사용합니다. 로컬 컴퓨터에서는 모든 것이 완벽하지만 우리 서버에만 문제가있었습니다.Http Auth가 PHP와 함께 작동하지 않습니다.

올바른 로그인 데이터를 제출하면 문제가 발생하여 로그인 화면이 다시 나타납니다. 내가 다른 로그인 데이터, 다른 브라우저를 시도, 로그인 화면이 반복해서 나타납니다. 나는 htaccess로/htpasswd가 사용하는 경우

는 HTTP 인증 프로세스가 작동 ...

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] 

하지만 난 단지 404 가지고 :

는 I가 마지막으로 확인 된 것은 내 htaccess로 변경했다 하지만이 문제를 PHP로 해결하고 싶습니다. 그리고 무엇보다 문제가 무엇인지 이해하고 싶습니다. 내 로컬 컴퓨터에, 이전이 코드 작업을

<?php 
$realm = 'Geschützter Bereich'; 

// Benutzer => Passwort 
$benutzer = array('admin' => 'mypass', 'gast' => 'gast'); 

if (empty($_SERVER['PHP_AUTH_DIGEST'])) { 
    header('HTTP/1.1 401 Unauthorized'); 
    header('WWW-Authenticate: Digest realm="' . $realm . 
      '",qop="auth",nonce="' . uniqid() . '",opaque="' . md5($realm) . 
      '"'); 

    die('Text, der gesendet wird, falls der Benutzer auf Abbrechen drückt'); 
} 

// Analysieren der Variable PHP_AUTH_DIGEST 
if (!($daten = http_digest_parse($_SERVER['PHP_AUTH_DIGEST'])) || 
    !isset($benutzer[$daten['username']])) 
    die('Falsche Zugangsdaten!'); 

// Erzeugen einer gültigen Antwort 
$A1 = md5($daten['username'] . ':' . $realm . ':' . 
      $benutzer[$daten['username']]); 
$A2 = md5($_SERVER['REQUEST_METHOD'] . ':' . $daten['uri']); 
$gueltige_antwort = md5($A1 . ':' . $daten['nonce'] . ':' . $daten['nc'] . 
         ':' . $daten['cnonce'] . ':' . $daten['qop'] . ':' . 
         $A2); 

if ($daten['response'] != $gueltige_antwort) 
    die('Falsche Zugangsdaten!'); 

// OK, gültige Benutzername & Passwort 
echo 'Sie sind angemeldet als: ' . $daten['username']; 

// Funktion zum analysieren der HTTP-Auth-Header 
function http_digest_parse($txt) { 
    // gegen fehlende Daten schützen 
    $noetige_teile = array('nonce'=>1, 'nc'=>1, 'cnonce'=>1, 'qop'=>1, 
          'username'=>1, 'uri'=>1, 'response'=>1); 
    $daten = array(); 
    $schluessel = implode('|', array_keys($noetige_teile)); 

    preg_match_all('@(' . $schluessel . ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@', 
        $txt, $treffer, PREG_SET_ORDER); 

    foreach ($treffer as $t) { 
     $daten[$t[1]] = $t[3] ? $t[3] : $t[4]; 
     unset($noetige_teile[$t[1]]); 
    } 

    return $noetige_teile ? false : $daten; 
} 
?> 

같은 상황,하지만 문제는 내 서버에 여전히 살아있다 : ​​

는이 코드와 PHP의 HTTP 인증을 시도 문제를 제한합니다.

환경에 대한 일부 정보 .. 지역

: 데비안 PHP 5.6 서버와 : 젠투 내가 루멘 5.1 대신 Laravel을 사용하는 프로젝트에 대한 PHP 5.6

와.

답변

0

문제가 해결되었습니다.

Google 서버에서 phpinfo()를 확인했으며 SERVER API가 CGI/FastCGI에 있습니다.

HTTP Auth via PHP - PHP_AUTH_USER not set?

실행은 phpinfo(). "서버 API"가 CGI/FCGI 인 경우 을 잊어 버릴 수 있습니다. PHP에서 HTTP 인증을 사용하는 합리적인 방법이 없기 때문입니다.

이제는 어디에 문제가 있는지 알았고 다음 부분을 공개/.htacces에 추가하는 동안 문제를 해결했습니다.

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0 
관련 문제