cakephp应用程序中的SAML SSO

我有一个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',
    );

(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)我在浏览器上输入了网址“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

点赞