2013-03-20 3 views
2

Я пытаюсь реализовать инструмент проверки подлинности SimpleSAMLphp в cakePHP. я написал SamlAuthenticate компонент в app\Controller\Component\Auth который выглядит следующим образом:Использование simplesamlphp 1.10 с cakePHP 2.3 не работает

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; 
    } 
} 

Но я всегда получаю петлю между провайдером идентификации и мой торт приложения.

мне было интересно, если мой сервер проблема или я сделал что-то неправильно с конфигурацией поставщика идентичности, так что я написал простой тестовый сценарий, и он работал без проблем:

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

Возможно, вы находитесь в конфликте сессии.

Посмотрите на LostState информацию о простой документации SAMLphp.

быстрый обходной путь, чтобы увидеть, если это ваша проблема:

Настройка simplesamlphp сохранить сессию кэша. Вам нужно будет установить сервер кэша памяти, то Memcache драйвер PHP (не забудьте перезагрузить апач после установки я), а затем отредактировать файл конфигурации/config.php из simpleSAMLphp и установить

'store.type' => 'memcache', 

Убедитесь, что simpleSAMLphp может написать сеанс, использующий расширение cookie firefox. (Посмотрите на параметры сеанса/cookie файла config/config.php.

+0

Действительно, это был конфликт сеанса. CakePHP не использует имя сеанса, настроенное в php.ini, вместо этого использует 'CAKEPHP' Вот почему сессии никогда не совпадали. Thx для подсказки – Gesh

+0

+1 для ссылки, а memcache, безусловно, подходит для использования в качестве постоянного хранилища, хотя, если вы уже используете что-то еще для состояния приложения (например, базы данных), тогда вам также не нужно устанавливать memcache – Peter

 Смежные вопросы

  • Нет связанных вопросов^_^