我有一个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/

10-09 06:07