Я пытаюсь реализовать инструмент проверки подлинности 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 с тем же результатом.
Действительно, это был конфликт сеанса. CakePHP не использует имя сеанса, настроенное в php.ini, вместо этого использует 'CAKEPHP' Вот почему сессии никогда не совпадали. Thx для подсказки – Gesh
+1 для ссылки, а memcache, безусловно, подходит для использования в качестве постоянного хранилища, хотя, если вы уже используете что-то еще для состояния приложения (например, базы данных), тогда вам также не нужно устанавливать memcache – Peter