2013-03-20 2 views
2

cakePHP에 SimpleSAMLphp 인증 도구를 구현하려고합니다. I는 다음과 같습니다 app\Controller\Component\AuthSamlAuthenticate 구성 요소 썼다 :cakePHP 2.3에서 simplesamlphp 1.10 사용

class SamlAuthenticate extends Component { 

    [...] 

    public function authenticate(CakeRequest $request, CakeResponse $response) { 
      $source = null; 
      $as = null; 
      if ($this->Session->check('Saml.source')) { 
        $source = $this->Session->read('Saml.source'); 
      } 

      if ($source) { 
        require_once($this->settings['path'] . DS . 'lib' . DS . '_autoload.php'); 
        $as = new SimpleSAML_Auth_Simple($source); 
        if(!$as->isAuthenticated()) { 
          $as->login(); 
        } else {        
          return $as->getAttributes(); 
        } 
      } 

      return false; 
    } 
} 

을하지만 항상 ID 공급자와 내 케이크 응용 프로그램 사이의 루프를 얻고있다.

궁금 해서요, 내 서버에 문제가 있거나 내가 ID 공급자의 구성이 잘못을했다, 그래서 나는 간단한 테스트 스크립트를 작성하고 문제없이 일 경우 : 그래서

require_once('/../simplesamlphp/lib/_autoload.php'); 
$as = new SimpleSAML_Auth_Simple('facebook'); 

$as->requireAuth(); 
echo $as->isAuthenticated(); 

, cakePHP의 무언가가 인증 프로세스를 중단시킵니다. SimpleSAMLAuthToken이 올바르게 설정되어 있습니다 (SimpleSAMLphp 관리자 패널을 통해 볼 수 있음). $as->isAuthenticated()은 항상 false를 반환합니다.

나는 또한 https://github.com/bvidulich/CakePHP-simpleSAMLphp-Plugin과 같은 결과를 보았습니다.

답변

4

아마도 세션 충돌이 있습니다.

simpleSAMLphp 설명서의 LostState 정보를 살펴보십시오.

구성 memcache에에 세션을 저장하는 simplesamlphp : 그 문제의 경우

빠른 해결 방법을 볼 수 있습니다. simpleSAMLphp 쓸 수있는 당신은

'store.type' => 'memcache', 

확인의 memcache에 PHP 드라이버 (이후 IR 설치 아파치를 다시 시작 기억) 다음 simpleSAMLphp의 설정/config.php 파일을 편집하려면 memcache에 서버를 설치해야하고 설정합니다 파이어 폭스의 쿠키 확장을 사용하는 세션. (config/config.php 파일의 세션/쿠키 매개 변수에 대해 살펴보십시오.)

+0

실제로 세션 충돌이었습니다 .CakePHP는 php.ini에서 구성된 세션 이름을 사용하지 않고 대신'CAKEPHP'를 사용합니다 그 이유는 세션이 일치하지 않는 이유입니다. 힌트는 Thx – Gesh

+0

+1, memcache는 영속 저장소로 사용하는 것이 좋습니다. 이미 응용 프로그램 상태 (예 : 데이터베이스)에 다른 것을 사용하고 있지만 memcache도 설치할 필요가 없습니다. – Peter

관련 문제