asminog/yii2-saml

将 Yii 2 应用连接到 Saml 身份提供者以实现单点登录

安装数: 6,547

依赖项: 0

建议者: 0

安全性: 0

星标: 0

关注者: 3

分支: 19

类型:yii2-extension

2.1.1 2021-07-07 10:01 UTC

This package is not auto-updated.

Last update: 2024-09-26 03:12:48 UTC


README

Build Status

将 Yii 2 应用连接到 Saml 身份提供者以实现单点登录

安装

安装此扩展的首选方式是通过 composer

运行以下命令之一

php composer.phar require --prefer-dist asminog/yii2-saml "*"

或将以下内容添加到您的 composer.json 文件的 require 部分中。

"asminog/yii2-saml": "*"

配置

config/web.php 中将 asminog\yii2saml\Saml 注册到组件中。

'components' => [
    'saml' => [
        'class' => 'asminog\yii2saml\Saml',
        'configFileName' => '@app/config/saml.php', // OneLogin_Saml config file (Optional)
    ]
]

此组件需要一个存储在 PHP 文件中的 OneLogin_Saml 配置。默认的 configFileName 值为 @app/config/saml.php,因此请确保在之前创建此文件。此文件必须返回 OneLogin_Saml 配置。有关示例配置,请参阅此链接

<?php

$urlManager = Yii::$app->urlManager;
$spBaseUrl = $urlManager->getHostInfo() . $urlManager->getBaseUrl();

return [
    'sp' => [
        'entityId' => $spBaseUrl.'/saml/metadata',
        'assertionConsumerService' => [
            'url' => $spBaseUrl.'/saml/acs',
        ],
        'singleLogoutService' => [
            'url' => $spBaseUrl.'/saml/sls',
        ],
        'NameIDFormat' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified',
    ],
    'idp' => [
        'entityId' => 'identity-provider',
        'singleSignOnService' => [
            'url' => 'https://idp.com/sso',
        ],
        'singleLogoutService' => [
            'url' => 'https://idp.com/sls',
        ],
        'x509cert' => '<x509cert string>',
    ],
];

注意:从版本 1.6.0 开始,您可以直接将配置放入组件中。例如

<?php

$urlManager = Yii::$app->urlManager;
$spBaseUrl = $urlManager->getHostInfo() . $urlManager->getBaseUrl();

$config = [
    // some other configuration here

    'components' => [
        'saml' => [
            'class' => 'asasmoyo\yii2saml\Saml',
            'config' => [
                'sp' => [
                    'entityId' => $spBaseUrl.'/saml/metadata',
                    'assertionConsumerService' => [
                        'url' => $spBaseUrl.'/saml/acs',
                    ],
                    'singleLogoutService' => [
                        'url' => $spBaseUrl.'/saml/sls',
                    ],
                    'NameIDFormat' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified',
                ],
                'idp' => [
                    'entityId' => 'identity-provider',
                    'singleSignOnService' => [
                        'url' => 'https://idp.com/sso',
                    ],
                    'singleLogoutService' => [
                        'url' => 'https://idp.com/sls',
                    ],
                    'x509cert' => '<x509cert string>',
                ],
            ];
        ]
    ],

    // some other configuration here
];

return $config;

使用方法

此扩展提供 4 个动作

  1. LoginAction

    此动作将启动配置文件中指定的身份提供者的登录过程。要使用此动作,只需在控制器中将此动作注册到动作中。

    <?php
    
    namespace app\controllers;
    
    use Yii;
    use yii\web\Controller;
    use yii\helpers\Url;
    
    
    class SamlController extends Controller {
    
        // Remove CSRF protection
        public $enableCsrfValidation = false;
    
        public function actions() {
            return [
                'login' => [
                    'class' => 'asminog\yii2saml\actions\LoginAction'
                ]
            ];
        }
    
    }

    现在,您可以通过访问 saml/login 来登录到您的身份提供者。

  2. AcsAction

    此动作将处理身份提供者在登录成功后发送的 saml 响应。您可以为执行一些操作(如读取身份提供者发送的属性并从这些属性中创建新用户)注册一个回调。要使用此动作,只需将此动作注册到控制器中的动作。

    <?php
    
    namespace app\controllers;
    
    use Yii;
    use yii\web\Controller;
    use yii\helpers\Url;
    
    
    class SamlController extends Controller {
    
        // Remove CSRF protection
        public $enableCsrfValidation = false;
    
        public function actions() {
            return [
                ...
                'acs' => [
                    'class' => 'asminog\yii2saml\actions\AcsAction',
                    'successCallback' => [$this, 'callback'],
                    'successUrl' => Url::to('site/welcome'),
                ]
            ];
        }
    
        /**
         * @param array $attributes attributes sent by Identity Provider.
         * @param string $nameId nameId sent by Identity Provider after v2.1.1.
         */
        public function callback($attributes, $nameId = null) {
            // do something
        }
    }

    注意:请确保在身份提供者中注册 acs 动作的 URL 到 AssertionConsumerService,以及 sls 动作的 URL 到 SingleLogoutService(如果支持)。

  3. MetadataAction

    此动作将展示您的应用程序的元数据(XML 格式)。要使用此动作,只需将动作注册到控制器的动作。

    <?php
    
        public function actions() {
            return [
                ...
                'metadata' => [
                    'class' => 'asminog\yii2saml\actions\MetadataAction'
                ]
            ];
        }
  4. LogoutAction

    此动作将启动到身份提供者的单点退出过程。要使用此动作,只需将此动作注册到控制器的动作中。

    <?php
    
        public function actions() {
            return [
                ...
                'logout' => [
                    'class' => 'asminog\yii2saml\actions\LogoutAction',
                    'returnTo' => Url::to('site/bye'),
                ]
            ];
        }
  5. SlsAction

    此动作将处理身份提供者发送的 saml 登出请求/响应。要使用此动作,只需将此动作注册到控制器中的动作。

    <?php
    
        public function actions() {
            ...
    
            return [
                ...
                'sls' => [
                    'class' => 'asminog\yii2saml\actions\SlsAction',
                    'successUrl' => Url::to('site/bye'),
                ]
            ]
        }

使用方法

如果 SAMLResponse 被拒绝,请将以下参数添加到 SAML 设置中

'debug' => true,

并将提示原因。

许可证

MIT 许可证