我正在尝试在 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,结果相同。