备份代码
它的作用
备份代码是一次性身份验证代码,可以代替实际代码使用。它们旨在作为紧急代码,当身份验证设备不可用时,您必须通过双因素身份验证过程。
在配置中启用该功能
1 2 3 4
# config/packages/scheb_2fa.yaml
scheb_two_factor:
backup_codes:
enabled: true # If the backup code feature should be enabled
备份代码必须从用户对象提供。用户实体必须实现 Scheb\TwoFactorBundle\Model\BackupCodeInterface
。这是一个例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
<?php
namespace Acme\Demo\Entity;
use Doctrine\ORM\Mapping as ORM;
use Scheb\TwoFactorBundle\Model\BackupCodeInterface;
class User implements BackupCodeInterface
{
/**
* @ORM\Column(type="json")
*/
private array $backupCodes = [];
// [...]
/**
* Check if it is a valid backup code.
*/
public function isBackupCode(string $code): bool
{
return in_array($code, $this->backupCodes);
}
/**
* Invalidate a backup code
*/
public function invalidateBackupCode(string $code): void
{
$key = array_search($code, $this->backupCodes);
if ($key !== false){
unset($this->backupCodes[$key]);
}
}
/**
* Add a backup code
*/
public function addBackUpCode(string $backUpCode): void
{
if (!in_array($backUpCode, $this->backupCodes)) {
$this->backupCodes[] = $backUpCode;
}
}
}
该示例假设已为该用户生成代码。 除此之外,您应该根据自己的喜好实现备份代码(重新)生成。
自定义备份代码管理器
如果您不喜欢这种实现方式,您也可以拥有自己的备份代码管理器。创建一个实现 Scheb
的服务并在配置中注册它
1 2 3 4
# config/packages/scheb_2fa.yaml
scheb_two_factor:
backup_codes:
manager: acme.custom_backup_code_manager # Use a custom backup code manager
本作品,包括代码示例,根据 Creative Commons BY-SA 3.0 许可获得许可。