我有一个cakephp应用程序,需要用户通过SAML登录登录进行身份验证.为此,我按照“
https://github.com/zl4bv/CakePHP-simpleSAMLphp-Plugin”链接.
根据其文档,我已经下载了cakephp和simpleSAMLphp的新副本.现在,我的工作区中有一个cakephp文件夹和simpleSAMLphp文件夹.我已经安装了simpleSAMLphp,如链接“https://simplesamlphp.org/docs/stable/”中所述.
我按照以下步骤操作:
(1)我在apache配置中配置了simpleSAML,如下所示:
<VirtualHost *>
ServerName service.local-saml.com
DocumentRoot /var/www/simplesamlphp/www/
<Directory "/var/www/simplesamlphp/www/">
Order allow,deny
Allow from all
Require all granted
</Directory>
</VirtualHost>
(2)现在,在simplesamlphp应用程序文件夹中,我更改了/config/config.php文件中’auth.adminpassword’,’secretsalt’,’technicalcontact_name’,’technicalcontact_email’的值.
(3)我使用了SAML:sp模块,默认启用.
(4)首先,我开始使用SAML作为身份提供者.
(5)我启用了’enable.saml20-idp’=>是,在/config/config.php文件中.
(6)使用终端上的命令创建ssl自签名证书
sudo openssl req -new -x509 -days 3652 -nodes -out /etc/ssl/certs/simplesamlphp.crt -keyout /etc/ssl/certs/simplesamlphp.pem
(7)将上述证书移至simplesamlphp / cert.
(8)为config / authsources.php添加了私钥和证书
'default-sp' => array(
'saml:SP',
'privatekey' => 'simplesamlphp.pem',
'certificate' => 'simplesamlphp.crt',
)
(9)还向“metadata / saml20-idp-hosted.php”文件添加了私钥和证书.
(10)更改了“metadata / saml20-sp-remote.php”中的元数据
$metadata['http://service.local-saml.com'] = array(
'AssertionConsumerService' => 'http://service.local-saml.com/simplesaml/module.php/saml/sp/saml2-acs.php/default-sp',
'SingleLogoutService' => 'http://service.local-saml.com/simplesaml/module.php/saml/sp/saml2-logout.php/default-sp',
);
(12)我在浏览器上输入了网址“http://service.local-saml.com/simplesaml”,它正常工作.我尝试使用default-sp选项登录,但它运行正常.
现在,我想在我的cakephp应用程序中使用这个simplesamlphp.
(13)为此,如“https://github.com/zl4bv/CakePHP-simpleSAMLphp-Plugin”中所述,我将saml文件夹放在Cakephp的/ app / plugin文件夹中
(14)我在core.php和bootstrap.php文件中添加了行.
(15)我创建了一个usersController,并且与链接的示例文件中给出的相同.
(16)我添加了以下内容
'sp1' => array(
'saml:SP',
'privatekey' => 'simplesamlphp.pem',
'certificate' => 'simplesamlphp.crt',
'entityID' => 'http://localhost/cakephp1',
),
在simplesamlphp的config / authsources.php中.
(17)我在metadata / saml20-sp-remote.php中添加了元数据
$metadata['http://localhost/cakephp'] = array(
'AssertionConsumerService' => 'http://localhost/cakephp',
'SingleLogoutService' => 'http://localhost/cakephp',
);
当我在浏览器上键入localhost / cakephp时,重定向到“https://openidp.feide.no/simplesaml/module.php/core/loginuserpass.php”的链接,用户输入他的用户名和密码,但“状态信息丢失”错误显示在“http://service.local-saml.com/simplesaml/module.php/saml/sp/saml2-acs.php/sp1”,用户不会返回“localhost / cakephp”.当用户输入登录凭据时,我希望用户返回到cakephp url.
请帮助我,我错了,我错过了什么?
最佳答案 似乎cakephp和simpleSAMLphp有会话冲突.一个可行的解决方案是安装memcache并使用memcache具有simpleSAMLphp的会话处理程序.
https://simplesamlphp.org/docs/stable/simplesamlphp-maintenance#section_2_1
但还有更多方法,请检查:
https://simplesamlphp.org/docs/development/simplesamlphp-nostate