lucidprogrammer/yii2-simplesamlphp

使用 simplesamlphp 的 Yii2 SAML 服务提供商(SP)

安装: 482

依赖项: 0

建议者: 0

安全: 0

星标: 4

关注者: 2

分支: 5

开放问题: 3

类型:yii2-extension

1.3 2018-03-02 09:19 UTC

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) 进行了测试。