lucidprogrammer / yii2-simplesamlphp
使用 simplesamlphp 的 Yii2 SAML 服务提供商(SP)
Requires
- simplesamlphp/simplesamlphp: >=1.14
- yiisoft/yii2: 2.*.*
This package is not auto-updated.
Last update: 2024-09-28 20:30:33 UTC
README
使用 simplesamlphp 的 Yii2 SAML 服务提供商(SP)(yii2 扩展)。当您希望作为服务提供商(SP)时,该合作伙伴公司作为 SAML 身份提供商(IDP)非常有用。用户数据和凭证在 IDP,您使用基于 SAML 的登录并使用这些用户信息在您的 yii2 应用程序中。
这是一个非常基本的实现,我们不会在服务提供商端持久化来自 IDP 的用户数据,用于报告等。然而,这些添加相当简单。
安装
此扩展可以通过 composer 安装。在您的 yii2 应用程序文件夹中,运行以下命令。
composer require lucidprogrammer/yii2-simplesamlphp
这将安装该软件包作为 yii2 扩展,并更新扩展和安装 simplesamlphp 项目到 vendor 文件夹中。
配置
第 1 步 - 在您的 Web 服务器中为 /saml 配置别名。
在标准的 Web 服务器配置(如 Apache)中,DocumentRoot 将指向 yii2 应用程序的 Web 文件夹。为 /saml 创建一个指向 pathto_my-yii2-app/vendor/simplesamlphp/simplesamlphp/www 的别名。
在 Apache 的情况下,您可能需要进行如下操作(用 pathto_my-yii2-app 替换您的实际路径。)
echo "Alias /saml pathto_my-yii2-app/vendor/simplesamlphp/simplesamlphp/www" >> /etc/apache2/apache2.conf
echo "<Directory \"pathto_my-yii2-app/simplesamlphp/simplesamlphp/www/\"> \n Options Indexes FollowSymLinks \n AllowOverride all \n Require all granted \n </Directory>" >> /etc/apache2/apache2.conf
以下图表可能有助于说明。
my-yii2-app/
/web -> DocumentRoot
..
..
/vendor
...
...
/lucidprogrammer (newly created folder in vendor)
/simplesamlphp (newly created folder in vendor)
/simplesamlphp/wwww -> [Create an alias /saml pointing to pathto_my-yii2-app/vendor/simplesamlphp/simplesamlphp/www]
第 2 步 - 配置 yii2 配置。
Yii 配置很简单,只需在您的 config/web.php 中添加以下内容
'user' => [
'class' => 'lucidprogrammer\simplesamlphp\SamlUser',
//idAttribute is mandatory
//for example, if your IDP is sending a SAML payload which has ID, you may do as follows
'idAttribute' => 'ID',
//if you want to map IDP provided attributes to something else, you may do additional mappings as name value pairs.
//following are some examples, not mandatory
'firstName' => 'givenName',
'company' => 'companyName',
],
ADFS 示例,
'user' => [
'class' => 'lucidprogrammer\simplesamlphp\SamlUser',
//for example, if your IDP is ADFS, and you want to use email address as the unique ID
'idAttribute' => 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress',
],
关于在 yii2 中启用路由身份验证的说明
假设您在 yii2 设置中有一个如下所示的规则,
'access' => [
'class' => AccessControl::className(),
'only' => ['index','logout','about'],
'rules' => [
[
'allow' => true,
'actions' => ['index'],
'roles' => ['?'],
],
[
'actions' => ['logout'],
'allow' => true,
'roles' => ['@'],
],
],
],
组件安装后,当您访问网站/about 页面时,应重定向到配置的 saml idp 登录页面。
因此,如果您想使用 SAML 提供的属性并实现细粒度访问控制,yii2 使之变得简单。
关于 yii2 登录链接的说明。
如果您的应用程序有登录链接,例如,'site/login',则需要将其更改为 saml/login。
但是,最好使用 Yii::$app->user->loginUrl[0],这样它将使用正确的 loginUrl,无论是否有此插件都会工作。
示例应用
https://github.com/lucidprogrammer/yii2-adfs-saml20-sp
更新日志
2018 年 3 月 2 日 https://yiiframework.cn/doc-2.0/yii-base-object.html 类名 Object
自 PHP 7.2 起无效,请使用 [[BaseObject]] 代替。[处理与 yii 基础对象的向后兼容性] 添加了 SamlSettings 选项以方便配置。与 ADFS 3.0、Windows 2012 R2 和 simplesamlphp (IDP) 进行了测试。