跳到内容

备份代码

编辑此页

前提条件

要使用此功能,您必须安装 scheb/2fa-backup-code

1
composer require scheb/2fa-backup-code

它的作用

备份代码是一次性身份验证代码,可以代替实际代码使用。它们旨在作为紧急代码,当身份验证设备不可用时,您必须通过双因素身份验证过程。

在配置中启用该功能

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\TwoFactorBundle\Security\TwoFactor\Backup\BackupCodeManagerInterface 的服务并在配置中注册它

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 许可获得许可。
目录
    版本