utexas / simplesamlphp_auth
drupal/simplesamlphp_auth (https://drupal.org/project/simplesamlphp_auth) 的分支
Requires
- drupal/core: ^9.4 || ^10
- drupal/externalauth: ^1.1||^2.0
- utexas/simplesamlphp: 0.1.1
This package is auto-updated.
Last update: 2024-08-28 23:17:41 UTC
README
simplesamlphp_auth 模块使 Drupal 能够支持 SAML 用户认证。如果您想要它这样做,模块将自动在 Drupal 中创建用户账户。它还可以根据身份属性值动态分配 Drupal 角色。
前提条件
- 您必须安装并配置 SimpleSAMLphp 作为工作服务点(SP),因为该模块使用您的本地 SimpleSAMLphp SP 来支持 SAML。如果您使用 Composer 支持安装 simplesamlphp_auth 模块,您可以使用放置在您的 docroot/vendor/simplesamlphp/simplesamlphp 目录中的代码库(参见下方的“安装”)。
您也可以单独下载并安装 SimpleSAMLphp。有关将 SimpleSAMLphp 作为 SP 安装和配置的更多信息,请访问:http://www.simplesamlphp.org。
重要:您的 SP 必须配置为使用除 phpsession 以外的某种东西作为会话存储(在 config/config.php 中设置 store.type => 'memcache' 或 'sql')。
要使用 memcache 会话处理,您必须在您的服务器上安装 memcached,并且 PHP 必须有 memcache 扩展。有关安装 PHP 的 memcache 扩展的更多信息,请访问:https://php.ac.cn/manual/en/memcache.installation.php
如果您在一个共享主机上或者您不能安装 memcache 的机器上,请考虑使用 sql 处理器(store.type => 'sql')。
确保您的 SimpleSAMLphp 安装有一个正确配置的 "config" 和 "metadata" 文件夹,以及适当的 vhost 配置。有关更多信息,请访问:http://www.simplesamlphp.org。
-
您必须已安装 ExternalAuth 模块(https://www.drupal.org/project/externalauth)。有关安装说明,请参阅 ExternalAuth 模块中的 README.txt。
-
建议安装 Composer Manager (https://www.drupal.org/project/composer_manager) 模块,并允许它下载 simplesamlphp 库。有关安装说明,请参阅 composer_manager 模块中的 README.txt。如果您不能使用 Composer,请参阅下面的安装说明,通过 settings.php 将您的 SimpleSAMLphp 实例与 Drupal 链接。
安装
Drupal simplesamlphp_auth 模块需要连接到一个工作的 SimpleSAMLphp 实例。这可以通过两种方式完成,具体取决于您的设置
使用 Composer Manager 进行安装
确保您已根据其 README.txt 安装了 composer_manager 模块。
- 下载 simplesamlphp_auth 模块
- 解压它
- 将其移动到适当的模块目录(通常为 /modules)
- 运行 "composer drupal-update" 命令(参见上方的“前提条件”)
- SimpleSAMLphp 库现在将安装到您的 docroot/vendor/simplesamlphp/simplesamlphp 目录中。通过添加带有适当设置的 'config' 和 'metadata' 目录来配置库(参见 http://www.simplesamlphp.org)。建议从您已安装的 SimpleSAMLphp 实例或保存它们的另一个位置创建符号链接。
- 转到您网站的 Drupal 模块管理页面
- 启用模块
- 配置模块(见下文)
不使用 Composer 进行安装
-
确保您已安装有效的SimpleSAMLphp。它需要是一个独立的安装,项目根目录下需要有“vendor”文件夹。
-
下载 simplesamlphp_auth 模块
-
解压它
-
将其移动到适当的模块目录(通常为 /modules)
-
在您的settings.php文件中,添加SimpleSAMLphp安装的位置(不要有尾随斜杠)
例如:$settings['simplesamlphp_dir'] = '/var/www/simplesamlphp';
-
转到您网站的 Drupal 模块管理页面
-
启用模块
-
配置模块(见下文)
升级
此模块的Drupal 8版本提供从Drupal 6.x-2.x、Drupal 7.x-2.x和Drupal 7.x-3.x分支到Drupal 8的Migrate API的测试升级路径。其他分支可能有可用的升级路径,但未经过测试。
为了从您的Drupal 6或Drupal 7网站升级SimpleSAMLphp设置,请按照以下说明操作
- 如上所述安装并启用simplesamlphp_auth模块。
- 激活Migrate和Migrate Drupal核心模块,并执行您的升级迁移。有关此过程的更多信息,请参阅https://www.drupal.org/upgrade/migrate。
- 某些设置在此模块的早期版本中不存在。迁移后,它们将保持默认状态。
- 设置“通过SimpleSAMLphp激活身份验证”将始终迁移为未激活,以避免迁移后无法访问您的网站。请仔细检查迁移后的配置,并在设置验证后,手动激活通过SimpleSAMLphp的身份验证。
配置
基本配置
模块的配置相当直接。您需要知道您的SP将提供给模块以映射到Drupal的属性名称。
对于此模块的Drupal 8版本,需要额外步骤以允许访问SimpleSAMLphp路径。在Drupal 8的.htaccess中适当位置添加以下行,否则配置将导致权限拒绝错误。
复制并适应以下规则以直接执行贡献模块或自定义模块中的PHP文件,或在同一目录中运行另一个PHP应用程序。
RewriteCond %{REQUEST_URI} !/core/modules/statistics/statistics.php$
允许访问simplesaml路径
-
RewriteCond %{REQUEST_URI} !^/simplesaml
- 拒绝访问任何不匹配上述规则的PHP文件。
RewriteRule "^.+/.*.php$" - [F]
RewriteRule "^.+/.*.php$" - [F]
将SAML认证用户链接到Drupal用户
-
如果您没有现有的Drupal用户,请确保“注册用户”复选框被启用。当用户通过IdP正确认证后,将自动创建一个与SAML authname链接的Drupal用户。在成功完成SAML认证后,创建的Drupal用户将被加载并登录。
-
如果您有现有的Drupal用户,您可以在成功完成SAML认证后将其与SAML账户链接。您可以通过启用选项“在成功登录时自动启用SAML认证”来实现。如果用户通过SAML成功认证,则提供的SAML authname将与可用的Drupal用户名进行核对。如果找到匹配项,则现有Drupal用户将被链接到已认证的SAML身份。您还可以根据不同的Drupal字段和SAML属性匹配现有用户。有关详细信息,请参阅simplesamlphp_auth.api.php中的hook_simplesamlphp_auth_existing_user。
-
或者,您可以在用户注册或编辑用户时勾选“启用此用户利用SAML身份验证”复选框,将特定的Drupal用户链接到SAML账户。在这种情况下,Drupal用户名(默认)将被添加到authmap表中。这允许具有与authmap表中相同的authname的SAML认证用户以该Drupal用户身份登录。如果存储的authname不应与您的用例中的Drupal用户名匹配,您可以实现hook_simplesamphp_auth_account_authname_alter() - 请参阅simplesamlphp_auth.api.php。
-
如果您想限制哪些用户可以使用Drupal进行认证,您可以
- 仅允许具有特定角色的SAML用户访问 - 请参阅simplesamlphp_auth.api.php中的hook_simplesamlphp_auth_allow_login
- 禁用“注册用户”选项,启用“登录成功后自动启用SAML身份验证”选项,并为希望允许的用户注册Drupal账户。请确保它们的用户名与SAML authname属性匹配,或根据上面的段落使用其他字段进行链接。
故障排除
-
安装失败
- 事情不正常工作的最常见原因是SP会话存储类型仍设置为phpsession。
- 如果设置正确,请确保您的Drupal安装可以连接到正在运行的工作SimpleSAMLphp实例。请参阅上面的“安装”部分。
-
用户名无法正确同步或导致错误
- Drupal用户名必须是唯一的。这在代码和数据库级别上得到强制执行。根据您的设置,这可能在接收到的SimpleSAMLphp属性中未得到强制执行,或者已存在具有相同用户名的预存在Drupal用户。以下是您如何解决这个问题的方法
- 建议将SimpleSAMLphp身份验证设置“用作用户用户名的SimpleSAMLphp属性”设置为唯一的SAML属性,最好与“用作用户唯一标识符的SimpleSAMLphp属性”相同。这可能会使Drupal用户名不那么易于阅读,并且可能不是您在网站上视觉表示用户的方式。您可以通过使用hook_user_format_name_alter()来修改账户名称的显示方式来修复此问题。
- 在具有相同用户名的预存在用户的情况下,您应验证预存在的Drupal用户和SAML认证用户是否是同一个人。如果是,请确保您已启用设置“登录成功后自动启用SAML身份验证”。这将确保现有的Drupal用户将被链接到SAML认证用户,而不会导致错误。尽管您应确保此操作是有效的,并且不会导致SAML认证用户接管其他预存在Drupal用户的账户。
- Drupal用户名必须是唯一的。这在代码和数据库级别上得到强制执行。根据您的设置,这可能在接收到的SimpleSAMLphp属性中未得到强制执行,或者已存在具有相同用户名的预存在Drupal用户。以下是您如何解决这个问题的方法