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


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

  1. Доступ website.com
  2. Перенаправлено на Страницу согласия SSOCircle
  3. Проверка личности
  4. Передавать пользовательские данные обратно в website.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. Не уверен, поможет ли это

НОЛЬ Перенаправлять Вы были перенаправлены на: : Я только что проверил журналы и получил это предупреждение

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

Author: JianYA, 2018-03-10

1 answers

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

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

В 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. Имя пользователя и пароль хранятся в индексе массива (студент: студенческий билет для студента-пользователя. Атрибуты для каждого пользователя настраиваются в массиве, на который ссылается индекс. Для пользователя-студента это:

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

 2
Author: user10089632, 2018-03-18 19:25:42