asminog / yii2-saml
将 Yii 2 应用连接到 Saml 身份提供者以实现单点登录
Requires
- onelogin/php-saml: ^3.0.0
- yiisoft/yii2: ^2.0.15
This package is not auto-updated.
Last update: 2024-09-26 03:12:48 UTC
README
将 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 个动作
-
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
来登录到您的身份提供者。 -
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
(如果支持)。 -
MetadataAction
此动作将展示您的应用程序的元数据(XML 格式)。要使用此动作,只需将动作注册到控制器的动作。
<?php public function actions() { return [ ... 'metadata' => [ 'class' => 'asminog\yii2saml\actions\MetadataAction' ] ]; }
-
LogoutAction
此动作将启动到身份提供者的单点退出过程。要使用此动作,只需将此动作注册到控制器的动作中。
<?php public function actions() { return [ ... 'logout' => [ 'class' => 'asminog\yii2saml\actions\LogoutAction', 'returnTo' => Url::to('site/bye'), ] ]; }
-
SlsAction
此动作将处理身份提供者发送的 saml 登出请求/响应。要使用此动作,只需将此动作注册到控制器中的动作。
<?php public function actions() { ... return [ ... 'sls' => [ 'class' => 'asminog\yii2saml\actions\SlsAction', 'successUrl' => Url::to('site/bye'), ] ] }
使用方法
如果 SAMLResponse 被拒绝,请将以下参数添加到 SAML 设置中
'debug' => true,
并将提示原因。
许可证
MIT 许可证