silinternational / simplesamlphp-module-mfa
一个简单的samlphp模块,用于提示用户输入MFA凭证(例如TOTP代码等)。
Requires
- php: >=7.2
- ext-json: *
- silinternational/idp-id-broker-php-client: ^4.0.0
- silinternational/php-env: ^2.1 || ^3.0
- silinternational/psr3-adapters: ^1.1 || ^2.0 || ^3.0
- simplesamlphp/simplesamlphp: ~1.17.7 || ~1.18.5 || ~1.19.0
- sinergi/browser-detector: ^6.1
Requires (Dev)
- behat/behat: ^3.3
- behat/mink: ^1.7
- behat/mink-goutte-driver: ^1.2
- phpunit/phpunit: ^8.4
- roave/security-advisories: dev-master
This package is auto-updated.
Last update: 2024-07-25 05:21:18 UTC
README
此存储库不再维护。它已被直接包含在 https://github.com/silinternational/ssp-base。
--
多因素认证(MFA)simpleSAMLphp模块
一个简单的samlphp模块,用于提示用户输入MFA凭证(例如TOTP代码等)。
此mfa模块作为认证处理过滤器(AuthProc)实现。这意味着它可以在全局config.php文件或SP远程或IdP托管元数据中进行配置。
建议在IdP上运行mfa模块,并将过滤器配置为在您可能启用的所有其他过滤器之前运行。
如何使用此模块
只需在您的composer.json
文件中包含simplesamlphp/composer-module-installer
和此模块即可。composer-module-installer
软件包将发现此模块并将其复制到simplesamlphp
中的modules
文件夹。
然后您需要在您的配置中设置过滤器参数。我们建议将它们添加到metadata/saml20-idp-hosted.php
文件中的'authproc'
数组中。
示例(对于metadata/saml20-idp-hosted.php
)
use Sil\PhpEnv\Env;
use Sil\Psr3Adapters\Psr3SamlLogger;
// ...
'authproc' => [
10 => [
// Required:
'class' => 'mfa:Mfa',
'employeeIdAttr' => 'employeeNumber',
'idBrokerAccessToken' => Env::get('ID_BROKER_ACCESS_TOKEN'),
'idBrokerAssertValidIp' => Env::get('ID_BROKER_ASSERT_VALID_IP'),
'idBrokerBaseUri' => Env::get('ID_BROKER_BASE_URI'),
'idBrokerTrustedIpRanges' => Env::get('ID_BROKER_TRUSTED_IP_RANGES'),
'idpDomainName' => Env::get('IDP_DOMAIN_NAME'),
'mfaSetupUrl' => Env::get('MFA_SETUP_URL'),
// Optional:
'loggerClass' => Psr3SamlLogger::class,
],
// ...
],
employeeIdAttr
参数表示存储用户员工ID的SAML属性名称。在某些情况下,这可能会显示给用户,并用于日志消息中。
loggerClass
参数指定一个PSR-3兼容的类名,该类可以自动加载,并在ExpiryDate中使用作为日志记录器。
mfaSetupUrl
参数用于发送用户设置的MFA的URL。
idpDomainName
参数用于组装WebAuthn MFA选项的信赖方源(RP Origin)。
本地测试
设置
将条目添加到您的hosts文件中,将mfa-sp.local
和mfa-idp.local
与您的docker容器的IP地址关联(如果您在Vagrant VM内运行docker,则这是Vagrantfile中的IP地址)。
自动化测试
运行make test
。
手动测试
在浏览器中转到 http://mfa-sp.local:52021/module.php/core/authenticate.php?as=mfa-idp 并使用在development/idp-local/config/authsources.php
中定义的用户之一进行登录。例如:用户名 = must_set_up_mfa
,密码 = a
转到 http://mfa-sp.local:52021/module.php/core/as_logout.php?ReturnTo=/&AuthId=mfa-idp 进行登出。
为什么使用AuthProc进行MFA?
基于...
- 存在多个其他用于MFA的simpleSAMLphp模块,作为AuthProc实现,
- 将我的解决方案作为AuthProc实现,并且有许多测试都确认它按预期工作,并且
- SimpleSAMLphp邮件列表中关于此的讨论
https://groups.google.com/d/msg/simplesamlphp/ocQols0NCZ8/RL_WAcryBwAJ
...似乎使用simpleSAMLphp AuthProc实现MFA足够安全。
有关更多详细信息,请参阅此Stack Overflow Q&A
https://stackoverflow.com/q/46566014/3813891
贡献
要贡献,请在此提交问题或拉取请求:https://github.com/silinternational/simplesamlphp-module-mfa
致谢
本内容改编自 silinternational/simplesamlphp-module-expirychecker
模块,该模块又是对其他模块的改编。感谢所有为此工作做出贡献的人。