robbyahnmsd / totp-authenticator
用于与 silverstripe/mfa 一起使用的 TOTP 认证器
Requires
- php: ^7.4 || ^8.0
- paragonie/constant_time_encoding: ^2.0
- robbyahnmsd/silverstripe-mfa: dev-feature/fix-darkmode
- silverstripe/siteconfig: ^4.0
- spomky-labs/otphp: ^10
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-20 01:59:27 UTC
README
使用手机上的认证器应用作为次要因素,通过基于时间的单次密码(TOTP)登录到 Silverstripe。
本模块提供了一种 TOTP 认证器,可插入到 silverstripe/mfa 模块。
有关 TOTP 的更多信息,请参阅 RFC 6238。
需求
- PHP ^7.1
- Silverstripe ^4.1
- silverstripe/mfa: ^4.0
- spomky-labs/otphp: ^9.1
安装
使用 Composer 安装
composer require silverstripe/totp-authenticator ^4.0
为了支持 Silverstripe 3.7,请使用 silverstripe/totp-authenticator ^3.0
。
配置
加密密钥
您需要定义一个名为 SS_MFA_SECRET_KEY
的环境变量,该变量包含一个随机密钥,用于加密 TOTP 密钥。只有在正确定义后,认证方法才可供使用。
请注意,对于在具有不同 SS_MFA_SECRET_KEY
值的环境中注册的用户现有的 TOTP 方法将无法使用。
创建随机密钥的方法有很多,最简单的是在命令行中执行一个 php
命令。密钥长度取决于您特定的信息安全控制,但32个字符是一个良好的起点。
php -r 'echo substr(base64_encode(random_bytes(32)), 0, 32) . "\n";'
TOTP 密钥长度
您还可以配置 TOTP 密钥的长度。这是在用户注册使用 TOTP 时显示给用户的代码,例如“另外,可以将此代码手动输入到您的应用中。”默认长度为16个字符。如果您不希望支持项目中的手动代码输入,则可能需要增加长度以提高 TOTP 密钥的熵,但是从 UI 中删除密钥将需要调整 React 组件。请参阅 RegisterHandler.secret_length
配置属性。
SilverStripe\TOTP\RegisterHandler: secret_length: 64
TOTP 代码长度
如果您想更改应用程序接受的 TOTP 代码的长度,可以调整 Method.code_length
。默认长度为6个字符。
SilverStripe\TOTP\Method: code_length: 10
用户帮助链接
当此方法在网站的多因素登录过程中使用时,它可能会显示一个指向用户文档的“了解更多”链接。您可以通过取消配置属性 RegisterHandler.user_help_link
来禁用此功能,或者将其更改为指向您自己的文档。
SilverStripe\TOTP\RegisterHandler: user_help_link: 'https://intranet.mycompany.com/help-docs/using-totp'
TOTP 发起人和标签
TOTP 的“发起人”默认是 Silverstripe 网站名称(在 SiteConfig 中设置),而“标签”默认是成员的电子邮件地址。这些是在您的认证器应用中显示的值。如果您需要使用其他内容,可以通过编写 RegisterHandler
的扩展来更改这些值。
class MyTOTPRegisterHandlerExtension extends Extension { public function updateTotp(\OTPHP\TOTPInterface $totp, \SilverStripe\Security\Member $member) { $totp->setLabel($member->getCustomTOTPLabel()); $totp->setIssuer('My web project'); } }
许可证
请参阅 许可证
错误跟踪器
错误在此存储库的问题部分跟踪。在提交问题之前,请阅读现有的问题以确保您的问题独特。
如果问题看起来像是一个新的错误
- 创建一个新问题
- 描述重现您问题的步骤以及预期的结果。单元测试、屏幕截图和屏幕录制可能会有所帮助。
- 尽可能详细地描述您的环境:Silverstripe 版本、浏览器、PHP 版本、操作系统、安装的任何 Silverstripe 模块。
请直接向模块维护者报告安全问题。请不要在错误跟踪器中报告安全问题。
开发和贡献
如果您想为此模块做出贡献,请确保您发起一个pull请求,并与模块维护者进行讨论。