2015-12-02 1 views
4

У меня есть приложение cakephp, для которого пользователи должны пройти аутентификацию через SAML Sign Sign. Для этого я пошел по ссылке «https://github.com/zl4bv/CakePHP-simpleSAMLphp-Plugin».SAML SSO в приложении cakephp

Согласно его документации, я загрузил свежие копии cakephp и simpleSAMLphp. Теперь у меня есть папка cakephp и папка simpleSAMLphp в моей рабочей области. Я установил simpleSAMLphp, как описано в ссылке «https://simplesamlphp.org/docs/stable/». я следовал следующие действия: (1) Я сконфигурированные simpleSAML в Apacheе congiguration, как показано ниже:

<VirtualHost *> 
     ServerName service.local-saml.com 
     DocumentRoot /var/www/simplesamlphp/www/ 

     <Directory "/var/www/simplesamlphp/www/"> 
     Order allow,deny 
     Allow from all 
     Require all granted 
    </Directory> 
</VirtualHost> 

(2) Теперь, в simplesamlphp папке приложения, я изменил значения 'auth.adminpassword', 'secretsalt', 'technicalcontact_name', 'technicalcontact_email' в файле /config/config.php.

(3) Я использовал модуль SAML: sp, который по умолчанию включен.

(4) Сначала я начал с SAML в качестве поставщика удостоверений.

(5) Я включил 'enable.saml20-idp' => true, в /config/config.php файл.

(6) Создано Ssl самоподписанного сертификата с помощью команды на клемме

sudo openssl req -new -x509 -days 3652 -nodes -out /etc/ssl/certs/simplesamlphp.crt -keyout /etc/ssl/certs/simplesamlphp.pem 

(7) перемещена вышеуказанные сертификаты simplesamlphp/CERT. (8) Добавлен секретный ключ и сертификат конфигурации/authsources.php

'default-sp' => array(
     'saml:SP', 
      'privatekey' => 'simplesamlphp.pem', 
      'certificate' => 'simplesamlphp.crt', 

    ) 

(9) Добавлен секретный ключ и certicates к "метаданных/saml20-IDP-hosted.php" файл также.

(10) Измененные метаданные в "метаданных/saml20-SP-remote.php"

$metadata['http://service.local-saml.com'] = array(
     'AssertionConsumerService' => 'http://service.local-saml.com/simplesaml/module.php/saml/sp/saml2-acs.php/default-sp', 
     'SingleLogoutService' => 'http://service.local-saml.com/simplesaml/module.php/saml/sp/saml2-logout.php/default-sp', 
    ); 

(11) Я добавил метаданные по ссылке "https://openidp.feide.no/simplesaml/module.php/core/loginuserpass.php?AuthState=_36266db92ac88d2d66ae8ede39dd1264a39243f08e%3Ahttps%3A%2F%2Fopenidp.feide.no%2Fsimplesaml%2Fmodule.php%2Fcore%2Fas_login.php%3FAuthId%3Dopenidp-ldap%26ReturnTo%3Dhttps%253A%252F%252Fopenidp.feide.no%252Fsimplesaml%252Fmodule.php%252Fmetaedit%252Findex.php".

(12) Я набрал URL-адрес «http://service.local-saml.com/simplesaml» в браузере и работает правильно. Я попытался войти в систему с параметром по умолчанию-sp, и он работает правильно.

Теперь, я хочу использовать этот simplesamlphp с моим приложением к cakephp. (13) Для этого, как указано в "https://github.com/zl4bv/CakePHP-simpleSAMLphp-Plugin", я положил папку SAML в/приложение/папку плагином CakePHP

(14) Я добавил линии на core.php и Bootstrap.php файлов.

(15) Я создал userController и сделал то же, что и в примерах файлов ссылки.

(16) Я добавил folllowing

'sp1' => array(
      'saml:SP', 
      'privatekey' => 'simplesamlphp.pem', 
      'certificate' => 'simplesamlphp.crt', 
      'entityID' => 'http://localhost/cakephp1', 
    ), 

в конфигурационном/authsources.php из simplesamlphp.

(17) Я добавил метаданные в метаданных/saml20-SP-remote.php

$metadata['http://localhost/cakephp'] = array(
     'AssertionConsumerService' => 'http://localhost/cakephp', 
     'SingleLogoutService' => 'http://localhost/cakephp', 
); 

Когда я напечатал LOCALHOST/CakePHP в браузере, ссылку перенаправлены на "https://openidp.feide.no/simplesaml/module.php/core/loginuserpass.php", пользователь вводит свой имя пользователя и пароль, но «Государственная информация потеряна». Ошибка отображается на «http://service.local-saml.com/simplesaml/module.php/saml/sp/saml2-acs.php/sp1», и пользователь не возвращается к «localhost/cakephp». Я хочу, чтобы пользователь возвращался на адрес cakephp, когда пользователь вводит учетные данные для входа.

Пожалуйста, помогите мне, где я ошибаюсь, и что я пропустил?

ответ

1

Кажется, что у cakephp и simpleSAMLphp есть конфликты сессий. Одним из возможных решений является установка memcache и использование memcache имеет обработчик сеанса для simpleSAMLphp. https://simplesamlphp.org/docs/stable/simplesamlphp-maintenance#section_2_1

Но есть и другие способы, проверьте: https://simplesamlphp.org/docs/development/simplesamlphp-nostate

+0

Не работает. Моя простая цель: у меня есть приложение «http: // localhost/cakephp». Я хочу, чтобы пользователи перенаправлялись на «https://openidp.feide.no», когда они не вошли в систему, и после ввода учетных данных для входа они не перенаправляются на мой сайт «http: // localhost/cakephp». Они перенаправляются на «http://service.local-saml.com/simplesaml/module.php/saml/sp/saml2-acs.php/sp1» с сообщением об ошибке «State Information Lost». Мой первый вопрос: «Почему пользователь пришел к URL-адресу« http://service.local-saml.com/simplesaml/module.php/saml/sp/saml2-acs.php/sp1 », вместо моего URL-адреса сайта? в вышеуказанных шагах? – Ishpreet

+0

Мое простое требование: я хочу использовать simplesamlphp как библиотеку вместо приложения. Пожалуйста, предложите мне шаги, чтобы следовать за этим – Ishpreet

+0

Возможно, метаданные, которые вы зарегистрировали в feide, уже соответствуют другому объекту, попробуйте изменить домен и зарегистрировать снова метаданные. – smartin

1

Вы также установить домен куки в php.ini?

session.cookie_domain = ".feide.no" 

NB! Если вы используете сеансы PHP, вам также необходимо убедиться, что ваше приложение использует тот же домен, когда он устанавливает cookie. Прочтите this source для получения дополнительной информации. Удачи.

0

есть простой способ включить simplesamlphp в CakePHP без этого плагина

1- добавить сконфигурировано и работает simplesamlphp в приложении/Lib папка 2 - в контроллере сделать свой собственный метод в моем случае я сделал авторизацию()

function auth() 
{ 
    $this->layout='ajax'; 
    $this->autoRender=false; 
     require_once(APP . 'Lib/simplesamlphp/www/_include.php'); 

SimpleSAML_Logger::info('SAML2.0 - IdP.SSOService: Accessing SAML 2.0 IdP endpoint SSOService'); 

$metadata = SimpleSAML_Metadata_MetaDataStorageHandler::getMetadataHandler(); 
$idpEntityId = $metadata->getMetaDataCurrentEntityID('saml20-idp-hosted'); 
$idp = SimpleSAML_IdP::getById('saml2:' . $idpEntityId); 
sspmod_saml_IdP_SAML2::receiveAuthnRequest($idp); 
assert('FALSE'); 

    } 

вместо удара адрес simplesamlphp как этот http://yoursimplesamlphpurl.com/saml2/idp/SSOService.php?spentityid=spname

Используйте этот адрес вашего CakePHP приложение lication http://your-cakeappurl.com/CakeControllername/auth?spentityid=spname

+0

Спасибо Fahad за ответ. Я попробую с этим методом, и если он успешно сработает, я буду принимать его как ответ – Ishpreet