2

我正在尝试在 cakePHP 中实现 SimpleSAMLphp 身份验证工具。我写了一个SamlAuthenticate组件app\Controller\Component\Auth,看起来像这样:

class SamlAuthenticate extends Component {

    [...]

    public function authenticate(CakeRequest $request, CakeResponse $response) {
            $source = null;
            $as = null;
            if ($this->Session->check('Saml.source')) {
                    $source = $this->Session->read('Saml.source');
            }

            if ($source) {
                    require_once($this->settings['path'] . DS . 'lib' . DS . '_autoload.php');
                    $as = new SimpleSAML_Auth_Simple($source);
                    if(!$as->isAuthenticated()) {
                            $as->login();
                    } else {                               
                            return $as->getAttributes();
                    }
            }

            return false;
    }
}

但是我总是在身份提供者和我的蛋糕应用程序之间建立一个循环。

我想知道,如果我的服务器有问题,或者我的身份提供者的配置有问题,所以我写了一个简单的测试脚本,它没有问题地工作:

require_once('/../simplesamlphp/lib/_autoload.php');
$as = new SimpleSAML_Auth_Simple('facebook');

$as->requireAuth();
echo $as->isAuthenticated();

因此,cakePHP 中的某些内容破坏了身份验证过程。SimpleSAMLAuthToken 设置正确(我可以通过 SimpleSAMLphp 管理面板看到),但$as->isAuthenticated()总是返回 false。

我还尝试了https://github.com/bvidulich/CakePHP-simpleSAMLphp-Plugin,结果相同。

4

1 回答 1

4

也许您处于会话冲突中。

查看 simpleSAMLphp 文档的LostState信息。

一个快速的解决方法,看看这是否是你的问题:

配置 simplesamlphp 以将会话保存在 memcache 上。你需要安装一个memcache服务器,memcache php驱动(记得安装ir后重启你的apache),然后编辑simpleSAMLphp的config/config.php文件并设置

'store.type' => 'memcache',

检查 simpleSAMLphp 是否可以使用 firefox 的 cookie 扩展来编写会话。(查看 config/config.php 文件的 session/cookie 参数。

于 2013-03-20T16:28:22.387 回答