Ошибка NoState SimpleSAMLPHP

у меня настроено два сервера simplesamlphp, они оба находятся на одном физическом сервере, но разделены виртуальным хостом. в настоящее время они находятся в доменах.

id.saml.domain.com ‹- Поставщик удостоверений

sp.saml.domain.com ‹- Поставщик услуг

У меня также есть третий сайт, веб-приложение, в котором я намерен реализовать единый вход. мы назовем это

test.domain.com/webapplication

у меня есть поставщик услуг и поставщик удостоверений, которые разговаривают друг с другом, используя example-auth. я могу пойти к поставщику услуг, щелкнуть «проверить источники аутентификации», получить отправку на сервер идентификации, а затем получить запрос на вход в систему, ввести пример учетных данных, нажать «Отправить» и получить отправку обратно поставщику услуг.

на данный момент все выглядит хорошо.

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

у меня есть следующий код входа в систему для вызова кода поставщика услуг

    $lib = "/ltsites/saml/service/lib";
    $sp = "default-sp";  // Name of SP defined in config/authsources.php

    try {
        // Autoload simplesamlphp classes.
        if(!file_exists("{$lib}/_autoload.php")) {
            throw(new Exception("simpleSAMLphp lib loader file does not exist: ".
            "{$lib}/_autoload.php"));
        }

        include_once("{$lib}/_autoload.php");
        $as = new SimpleSAML_Auth_Simple($sp);

        // Take the user to IdP and authenticate.
        $as->requireAuth();
        $valid_saml_session = $as->isAuthenticated();

    } catch (Exception $e) {
        // SimpleSAMLphp is not configured correctly.
        throw(new Exception("SSO authentication failed: ". $e->getMessage()));
        return;
    }

    if (!$valid_saml_session) {
        // Not valid session. Redirect a user to Identity Provider
        try {
            $as = new SimpleSAML_Auth_Simple($sp);
            $as->requireAuth();
        } catch (Exception $e) {
            // SimpleSAMLphp is not configured correctly.
            throw(new Exception("SSO authentication failed: ". $e->getMessage()));
            return;
        }
    }

    // At this point, the user is authenticated by the Identity Provider, and has access
    // to the attributes received with SAML assertion.
    $attributes = $as->getAttributes();

он перенаправляет меня на сервер идентификации и запрашивает учетные данные. но при возврате к поставщику услуг я получаю сообщение об ошибке

State information lost   
SimpleSAML_Error_NoState: NOSTATE

я нашел эту вики-страницу https://code.google.com/p/simplesamlphp/wiki/LostState, но ничего из того, что я сделал после прочтения (например, изменение 'session.cookie.domain' в config\config.php, которое просто отправило страницы в бесконечный цикл обновления), не сработало

У кого-нибудь есть идеи? я неправильно настроил? Я думаю, может быть, само веб-приложение должно быть поставщиком услуг? то есть test.domain.com/webapplication/simplesaml/, чтобы они находились в одном домене?


person Josh    schedule 27.03.2014    source источник


Ответы (1)


Вы можете попробовать изменить store.type сеанса в config.php. Вы можете сделать это у поставщика услуг или у поставщика удостоверений. Каким-то образом у них разные хранилища сеансов. Работает на меня.

person Pablo Moltedo    schedule 22.05.2014