我有一个cakephp应用程序,需要通过SAML登录对用户进行身份验证。为此,我点击了链接“ https://github.com/zl4bv/CakePHP-simpleSAMLphp-Plugin”。
根据其文档,我已经下载了Cakephp和simpleSAMLphp的新副本。现在,我的工作区中有一个cakephp文件夹和simpleSAMLphp文件夹。我已经按照链接“ https://simplesamlphp.org/docs/stable/”中所述安装了simpleSAMLphp。
我遵循以下步骤:
(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)我在/config/config.php文件中启用了'enable.saml20-idp'=> true。
(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',
);
(11)我在链接“ https://openidp.feide.no/simplesaml/module.php/core/loginuserpass.php?AuthState=_36266db92ac88d2d66ae8ede39dd1264a39243f08e%3Ahttps%3A%2F%2Fopenidp.feide.no%2Fsimplesaml%2Fmodule.php%2Fcore%2Fas_login.php%3FAuthId%3Dopenidp-ldap%26ReturnTo%3Dhttps%253A%252F%252Fopenidp.feide.no%252Fsimplesaml%252Fmodule.php%252Fmetaedit%252Findex.php”上添加了元数据。
(12)我在浏览器上键入了URL“ 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”。我希望在用户输入登录凭据时将用户返回cakecake url。
请帮助我哪里错了,我错过了什么?
最佳答案
似乎cakephp和simpleSAMLphp存在会话冲突。一种可行的解决方案是安装内存缓存,并使用具有针对simpleSAMLphp的会话处理程序的内存缓存。
https://simplesamlphp.org/docs/stable/simplesamlphp-maintenance#section_2_1
但是还有更多方法,请检查:
https://simplesamlphp.org/docs/development/simplesamlphp-nostate
关于cakephp - cakephp应用程序中的SAML SSO,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34036346/