多因素身份验证(MFA) (Pro)
多因素身份验证在登录时增加了一个额外步骤:在输入密码之后,DefectDojo 会要求您从身份验证器应用中获取一个六位数代码。我们强烈建议在未使用 SSO 的实例上,要求所有用户启用此功能。
DefectDojo Pro 的 MFA 使用基于 TOTP 的身份验证器应用——Google Authenticator、1Password、Authy,或任何其他可以扫描标准二维码的应用。没有电子邮件或短信选项。
在您的账户上设置 MFA
- 前往 Connect > Authorization > MFA Settings。
- 在个人多因素身份验证设置(Personal Multi-Factor Authentication Settings) 下,点击设置 MFA(Set Up MFA)。
- 使用您的身份验证器应用扫描二维码。如果无法扫描,设置界面也会以文本形式显示密钥,您可以手动将其输入到应用中。
- 输入应用显示的六位数代码,然后点击验证并启用(Verify & enable)。
- DefectDojo 会显示您的恢复代码。在继续之前,请将其保存到安全的地方——详见下文。点击复制代码(Copy codes),保存好后再点击我已保存,继续(I’ve saved them. Continue)。
从这一刻起,MFA 即生效。下次登录时,DefectDojo 会在您输入密码后要求提供代码。
恢复代码
启用 MFA 时,系统会为您颁发十个一次性恢复代码。每个代码只能使用一次,可以替代身份验证器应用中的代码使用,使用后即失效。
这些代码仅显示一次,即在最后的设置界面上。此后,MFA 设置页面只会显示您还剩多少个代码,而不会显示代码本身。
如果您丢失了恢复代码——或者在使用了几个之后想要一套新的——请在 MFA 设置页面点击重新生成恢复代码(Regenerate Recovery Codes)。这会替换您现有的所有代码:之前保存的任何代码都会立即失效,因此请立刻保存新的一套代码。
恢复代码是您在丢失手机时重新登录的途径,因此请将它们存放在运行身份验证器应用的设备之外的地方。
关闭 MFA
在 MFA 设置页面点击禁用 MFA(Disable MFA) 会为您自己的账户关闭该功能。您只需处于登录状态即可——系统不会要求您输入代码进行确认。
如果您的管理员已将 MFA 设为强制要求,您在下次登录时将被要求重新进行设置。
使用 MFA 登录
在输入用户名和密码后,DefectDojo 会要求提供您的六位数代码。如果您没有身份验证器应用,可以在同一字段中输入一个恢复代码代替——该代码随即会被使用。
为所有人强制要求 MFA
超级用户可以在整个实例范围内将 MFA 设为强制要求:
- 前往 Connect > Authorization > MFA Settings。
- 在 MFA 设置(MFA Settings) 卡片中——仅超级用户可见——勾选全局要求多因素身份验证(Require Multi-Factor Authentication Globally)。
- 提交。
此选项默认关闭。
开启后,任何尚未注册 MFA 的用户在下次登录时都会被引导至 MFA 设置界面,并且无法跳过此步骤。他们完成注册、保存恢复代码后,就会进入原本要前往的页面。
SSO 用户
MFA 由 DefectDojo 强制执行,而不是委托给您的身份提供商。在全局 MFA 强制要求开启的情况下,通过 SSO 登录的用户在其身份提供商将其重定向回 DefectDojo 后,同样会被引导设置 MFA,并在后续登录时被要求提供代码。
没有可以豁免 SSO 用户的设置。如果您的身份提供商已经强制执行其自身的 MFA,请慎重决定是否需要同时启用两者——开启全局 MFA 意味着 SSO 用户将需要经历两次提示。
恢复丢失 MFA 设备的用户
请按以下顺序操作:
使用恢复代码。 如果用户仍持有恢复代码,可以在登录时输入其中一个来代替应用代码,然后重新从头设置 MFA。
如果用户在其他地方仍处于登录状态, 可以前往 MFA 设置并点击禁用 MFA,无需代码即可操作,然后重新注册。
请管理员清除其 MFA。 拥有服务器访问权限的管理员可以从账户中移除 MFA:
python manage.py remove_mfa --username <username>该命令也接受使用
--user-id或--email代替--username(必须且只能指定其中一个;--email不区分大小写)。在进行更改之前,系统会要求确认。之后,用户即可仅使用密码登录并重新注册。这是一条 shell 命令,因此需要访问 DefectDojo 容器或主机的权限。界面或 API 中没有等效的按钮或端点。在 DefectDojo Cloud 上,请联系 来执行此操作。
无需创建替代账户——清除 MFA 会保留用户现有的权限、历史记录和分配情况。
MFA 与 API
当用户启用了 MFA 后,向 /api/v2/api-token-auth/(该端点用于将用户名和密码兑换为 API 令牌)发出的请求还必须在凭据旁附带一个 mfa_code 字段中的 MFA 代码。系统接受当前的 TOTP 代码或未使用过的恢复代码;在此处传入恢复代码会消耗该代码。
缺少代码或代码错误时,会返回与密码错误相同的通用 “Unable to log in with provided credentials” 错误,因此如果用户启用 MFA 后令牌请求开始失败,这是首先要检查的地方。
现有的 API 令牌仍会继续工作。 启用或禁用 MFA 不会撤销或轮换已经颁发的令牌——MFA 检查只在令牌颁发时进行,而不是在每次使用该令牌发出请求时进行。已经持有令牌的长期运行的自动化流程,不会因用户注册 MFA 而受到影响。