cesnet / simplesamlphp-module-totp
SimpleSAMLphp 的简单 TOTP 模块,基于 SimpleTOTP,使用 RobThree 的 TwoFactorAuth 库重写。
Requires
- php: ^7.2
- ext-curl: *
- ext-imagick: *
- ext-json: *
- bacon/bacon-qr-code: 2.0.7
- robthree/twofactorauth: 1.8.2
- simplesamlphp/composer-module-installer: 1.1.8
- web-token/jwt-core: 2.2.11
- web-token/jwt-easy: 2.2.11
- web-token/jwt-signature: 2.2.11
- web-token/jwt-signature-algorithm-rsa: 2.2.11
Requires (Dev)
- symplify/easy-coding-standard: 10.2.2
Suggests
- web-token/jwt-signature-algorithm-ecdsa: Adds ECDSA based signature algorithms
- web-token/jwt-signature-algorithm-eddsa: Adds EdDSA based signature algorithms
- web-token/jwt-signature-algorithm-hmac: Adds HMAC based signature algorithms
README
此模块不再开发。我们已经转向 privacyIDEA。请尝试我们 fork 的 simplesamlphp-module-privacyidea。
TOTP 是一个 SimpleSAMLphp 认证处理过滤器,它允许使用基于时间的单次密码算法 (TOTP) 作为身份提供者或服务提供者(或两者)的第二因素认证机制。
此模块受到 Aidan Rowe 的 SimpleTOTP 的启发,但使用了 Rob Janssen 的 PHP 双因素认证库。它可以使用 SSP 默认存储或数据库存储密钥,或与 Perun IDM 集成。
作为认证处理过滤器,此模块在许多方面都很灵活:
- 对 TOTP 密钥存储位置无感知
- 可以在选定的服务提供者或整个身份提供者上启用
使用方法
像任何其他认证过程过滤器一样,此模块需要在 config.php 或特定服务提供者或身份提供者的元数据中的 authproc 数组中进行配置。
先决条件
secret_attr
需要在属性有效负载中可用,因为它用于生成用于比较的令牌。可以使用其他认证过程过滤器添加,以查找外部数据库等。
调用模块后,该属性将从用户属性数组中移出。作为安全预防措施,应采取额外步骤确保删除此属性。可以使用 core:AttributeAlter
过滤器或类似方法完成此操作。
示例
放置在 config.php 的 authproc 中或适当的元数据实体中
10 => array( 'class' => 'totp:Totp', 'secret_attr' => 'totp_secret', //default 'enforce_2fa' => false, //default 'not_configured_url' => NULL, //default ),
放置在 config.php authproc 中作为最后要处理的函数之一
99 => array( 'class' => 'core:AttributeAlter', 'subject' => 'totp_secret', 'pattern' => '/.*/', '%remove', ),
以下示例演示了它与 example-userpass 模块一起工作的方式。以下配置放在 authsource.php 中。此模块默认启用,但如果未启用,请确保在 modules/exampleauth 目录中创建一个名为 enable 的文件。
'example-userpass' => array( 'exampleauth:UserPass', 'student:studentpass' => array( 'uid' => array('test'), 'ga_secret' => array('4HX4WBKVIJWDUV5I'), 'eduPersonAffiliation' => array('member', 'student'), ), ),
使用用户名:student
,密码:studentpass
登录后,您将需要 TOTP。 4HX4WBKVIJWDUV5I
是可以通过访问 /simplesaml/module.php/totp/generate_token.php
生成的密钥。
第一次加载时将生成一个随机密钥并保存到会话中。当使用新的会话访问页面时,将生成新的令牌。您可以使用二维码将您的 IdP 注册到 FreeOTP、Google Authenticator 等应用程序。
注意:为了使 TOTP 的工作,您 必须 确保服务器上的时钟同步。如果不这样做,则永远不会生成匹配的令牌,认证将失败。
安装
DecryptSecrets 过滤器
DecryptSecrets 过滤器用于解密加密的秘密并将它们保存到 Attributes 数组中。此过滤器还支持验证签名秘密并从 module_totp.php 获取配置选项。如果秘密签名验证失败,则令牌无法使用。
Perun 集成
为了使用 PerunStorage 并与 Perun 同步令牌,您需要将带有配置选项的 PerunStorage 数组添加到 module_totp.php
。
安装
此模块使用 Composer 进行依赖项管理。要安装它,克隆存储库并使用 composer install
。
注意
此模块不提供暴力破解保护,这需要确保安全(6位密码只有100000种选项)。认证页面应该进行暴力破解保护,以阻止潜在的攻击者。
许可协议
此模块在 BSD 2-Clause 许可协议下发布。
版权所有 (c) 2021,Masaryk 大学计算机科学研究所和 CESNET,z. s. p. o. 保留所有权利。