【问题标题】:SSOCircle keeps redirecting to Consent page SAML2.0SSOCircle 不断重定向到同意页面 SAML2.0
【发布时间】:2018-08-18 17:02:03
【问题描述】:

我正在使用 SSOCircle 通过 Codeigniter 测试我的 SAML 实现。目前的步骤是:

  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 页面。不确定这是否有帮助

空 重定向 你被重定向到: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

【问题讨论】:

    标签: php codeigniter saml saml-2.0 simplesamlphp


    【解决方案1】:

    更新: 下一段假设当您修改代码以避免循环重定向时,您已确保:

    Configure the authentication module:**

    在 unix 上,这可以通过运行(来自 SimpleSAMLphp 安装目录):

    touch modules/exampleauth/enable
    

    下一步是使用此模块创建身份验证源。 认证源是具有特定的认证模块 配置。每个身份验证源都有一个名称,用于 请参阅 IdP 配置中的此特定配置。 身份验证源的配置可以在 配置/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 可用
      仅适用于当前域。

    更多信息请关注the docs

    如果这仍然不起作用,作为最后的手段:try disabling varnish caching

    来源:
    https://github.com/zl4bv/CakePHP-simpleSAMLphp-Plugin/issues/7 https://www.drupal.org/project/simplesamlphp_auth

    【讨论】:

    • 您好,非常感谢您的回答。在我尝试做 var_dump($_COOKIE) 的那一刻,它显示了在我的框架中设置的 cookie 名称。 PHPSESSID 与我的框架设置的相同还是不同?
    • 没问题,如果你想这样做,你必须匹配所有变量,而不仅仅是 PHPSESSID。
    • 我明白了。因此,我在 simplesaml 配置文件中的当前会话 cookiename 很有可能正在查看我的框架之一而不是纯 PHP 框架?
    • 是的,前提是您已完成正确的设置。因此NOSTATE 警告。
    猜你喜欢
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 2015-06-19
    • 2020-09-20
    • 1970-01-01
    相关资源
    最近更新 更多