SSOCircle продолжает перенаправлять на страницу согласия SAML2.0

Я использую SSOCircle для тестирования своей реализации SAML с помощью Codeigniter. Текущие шаги:

  1. Доступ к веб-сайту.com
  2. Перенаправлено на страницу согласия SSOCircle
  3. Подтвердить личность
  4. Передать пользовательские данные обратно на веб-сайт.com

Однако после шага 3 он переходит к шагу 4 и сразу возвращается к шагу 3.

Это мой код:

public function index()
    {
        $data['languages']= get_all_languages();
        $sp_auth = 'default-sp';
        try {
            $auth = new SimpleSAML_Auth_Simple($sp_auth);
            $auth->requireAuth(array(
            'ReturnTo' => $this->data['controller'],
            'KeepPost' => FALSE,
            ));
            $attributes = $auth->getAttributes();
            var_dump($attributes);
        } catch (Error $e) {
            print_r($e);
        }
    }

Я подумал, что мое перенаправление может быть причиной того, что он продолжает вызывать страницу согласия. Однако при добавлении другого URL-адреса для доступа к этой функции

public function auth(){
        $attributes = $auth->getAttributes();
        var_dump($attributes);
}

Я получаю эту ошибку:

SimpleSAML_Error_Error: UNHANDLEDEXCEPTION

Backtrace:
1 www/_include.php:45 (SimpleSAML_exception_handler)
0 [builtin] (N/A)
Caused by: SimpleSAML_Error_Exception: No authentication source with id 'Login/Auth' found.
Backtrace:
2 lib/SimpleSAML/Auth/Source.php:335 (SimpleSAML_Auth_Source::getById)
1 modules/saml/www/sp/saml2-acs.php:12 (require)
0 www/module.php:135 (N/A)

Обновлять

Недавно я заметил, что SSOCircle фактически возвращается на мою страницу входа. Однако он немедленно перенаправляет его обратно на страницу SSOCircle. Не уверен, что это поможет

NULL Redirect You were redirected to: https://idp.ssocircle.com:443/sso/SSORedirect/metaAlias/publicidp?SAMLRequest=vVPBjtowEP2VyPfghCQqWIDELqoWabeLCO1hLytjD4ulxHY9k6X8fZ2kVbc9cOzJ0vO8N%2B%2FN2AuUbePFuqOz3cP3DpCSH21jUQwXS9YFK5xEg8LKFlCQEvX66VFMJ5nwwZFTrmEfKLcZEhECGWdZst0s2WtWgNafINe5UlrqY1lJmE1BlvOimkN10mVWZZDn85wl3yBgZC5ZFIp0xA62FklailCWz9KsSPP8kM1EVYqqeGHJJqYxVtLAOhN5FJwb7SeITpmgGpgo14qyLHhEeF0%2F70GbAIp4CyTXjZHIfXdsjIoslqx%2Fu793FrsWQg3h3Sj4un%2F8o6%2FhfRJdBe0UpjgWYN%2BH7x%2FuniCoLly59D6KDs44nU3Qr14GunI0rW%2BgnyO%2FXC68dbqLJv3Z8wHD8ZymUuGAajjJrqEUo7vdr23cGauNfbu9iONYhOLhcNilu%2Bf6wFaLXlsMgw2r%2FxSnn7OWJP9Js%2BAfvSzGR%2Folpthudi62uiafXWgl3Q7ZI0anp6FUUJAWDViKi2wad7kPIAmWjEIHjK%2FGln9%2FhdVP&RelayState=https%3A%2F%2Fwww.website.com%2Fapp

Обновление 2

Я только что проверил журналы и получил это предупреждение

Mar 12 23:26:26 simplesamlphp WARNING [da20d4a7a3] Could not load state specified by InResponseTo: NOSTATE Processing response as unsolicited.

Мне сказали, что это из-за потери информации о состоянии. Однако я проверил имена своих файлов cookie, и они совпадают. Что еще я пропустил?

https://github.com/simplesamlphp/simplesamlphp/wiki/State-Information-Lost


person JianYA    schedule 10.03.2018    source источник


Ответы (1)


Обновление. В следующем абзаце предполагается, что когда вы изменяли свой код, чтобы избежать циклического перенаправления, вы обязательно:

Настройте модуль аутентификации :**

В Unix это можно сделать, запустив (из каталога установки SimpleSAMLphp):

touch modules/exampleauth/enable

Следующим шагом является создание источника аутентификации с помощью этого модуля. Источник аутентификации — это модуль аутентификации с определенной конфигурацией. У каждого источника аутентификации есть имя, которое используется для ссылки на эту конкретную конфигурацию в конфигурации IdP. Конфигурацию источников аутентификации можно найти в config/authsources.php.

В этой настройке этот файл должен содержать одну запись:

<?php
$config = array(
    'example-userpass' => array(
        'exampleauth:UserPass',
        'student:studentpass' => array(
            'uid' => array('student'),
            'eduPersonAffiliation' => array('member', 'student'),
        ),
        'employee:employeepass' => array(
            'uid' => array('employee'),
            'eduPersonAffiliation' => array('member', 'employee'),
        ),
    ),
);

Эта конфигурация создает двух пользователей — студента и сотрудника с паролями studentpass и employeepass. Имя пользователя и пароль хранятся в индексе массива (student:studentpass для пользователя-студента. Атрибуты для каждого пользователя настраиваются в массиве, на который ссылается индекс. Для пользователя-студента это:

array(
    'uid' => array('student'),
    'eduPersonAffiliation' => array('member', 'student'),
),

Атрибуты будут возвращены IdP при входе пользователя в систему.

Несоответствие между настройками сеанса PHP для приложения и SimpleSAMLphp

Если и приложение, в которое вы пытаетесь добавить поддержку SAML 2.0, и SimpleSAMLphp используют сеанс PHP для хранения сеанса, и они не согласны по всем параметрам, вы можете получить эту ошибку. По умолчанию SimpleSAMLphp использует настройки из php.ini, но их можно переопределить в config/config.php.

Если это является причиной вашей ошибки, у вас есть два варианта:

Затем произошла ошибка No authentication source with id из-за конфликта обработки сеанса между simpleSAMLphp и codeIgniter.

Решение 1. Измените SimpleSAMLphp, чтобы использовать другой метод хранения сеансов.

Решение состоит в том, чтобы настроить simpleSAMLphp на использование чего-то другого, кроме phpsession, поскольку существует проблема с Memcached. лучше всего установить его на 'sql'. Вы делаете это в simplesamlphp/config/config.php:

/*
 * Configure the datastore for simpleSAMLphp.
 *
 * - 'phpsession': Limited datastore, which uses the PHP session.
 * - 'memcache': Key-value datastore, based on memcache.
 * - 'sql': SQL datastore, using PDO.
 *
 * The default datastore is 'phpsession'.
 *
 * (This option replaces the old 'session.handler'-option.)
 */
'store.type'                    => 'sql',

Решение 2. Измените настройки сеанса, чтобы они совпадали между приложением и SimpleSAMLphp:

Если вы решили сделать настройки сеанса одинаковыми, вам следует изменить настройки в php.ini. Это делается для того, чтобы настройки применялись ко всему, что использует настройки по умолчанию. Следующие параметры в php.ini должны соответствовать настройкам, используемым приложением:

  • session.save_handler: это метод, который используется для хранения сеанса. По умолчанию это «файлы».
  • session.save_path: это место, где сохраняются файлы сеанса. Значение по умолчанию зависит от вашей установки PHP.
  • session.name: это имя файла cookie сеанса. По умолчанию используется "PHPSESSID".
  • session.cookie_path: Путь, которым ограничен файл cookie сеанса. По умолчанию используется «/», что означает, что он доступен для всех страниц вашего домена.
  • session.cookie_domain: это домен, которым ограничивается файл cookie сеанса. Значение по умолчанию не установлено, что делает файл cookie доступным
    только для текущего домена.

Пожалуйста, посмотрите документы для получения дополнительной информации

Если это все еще не сработало, в крайнем случае: попробуйте отключить кэширование лака< /а>

Источники:
https://github.com/zl4bv/CakePHP-simpleSAMLphp-Plugin/issues/7 https://www.drupal.org/project/simplesamlphp_auth< /а>

person user10089632    schedule 18.03.2018
comment
Привет, большое спасибо за ответ. В тот момент, когда я пытаюсь сделать var_dump($_COOKIE), он показывает имя файла cookie, установленное в моей структуре. Является ли PHPSESSID тем же, что и мой фреймворк, или он отличается? - person JianYA; 19.03.2018
comment
Нет проблем, если вы хотите сделать это таким образом, вы должны сопоставить все переменные, а не только PHPSESSID. - person user10089632; 19.03.2018
comment
Я понимаю. Таким образом, есть большая вероятность, что мое текущее имя файла cookie сеанса в файле конфигурации simplesaml смотрит на мой фреймворк, а не на чистый PHP? - person JianYA; 19.03.2018
comment
Да, при условии, что вы сделали правильную настройку. отсюда и предупреждение NOSTATE. - person user10089632; 19.03.2018