独立多因素身份验证(MFA)允许您直接在 Access 中强制执行 MFA 要求,而无需依赖您的身份提供商(IdP)。用户照常向其 IdP 进行身份验证,然后 Access 会在授予应用程序访问权限之前提示输入其他身份验证方法。
由于您可以在应用程序和策略级别配置 MFA,因此您可以在敏感应用程序上强制执行更严格的身份验证方法(如硬件安全密钥),而无需在整个组织中要求使用它们。这使您能够在最需要的地方增加额外的安全性,同时避免更广泛的用户群体产生 MFA 疲劳。
| MFA 方法 | 描述 |
|---|---|
| 身份验证器应用程序 | 由 Google Authenticator、Microsoft Authenticator 或 Authy 等应用生成的基于时间的一次性密码(TOTP)。Access 一次仅支持每个用户使用一个 TOTP 身份验证器。 |
| 安全密钥 | 支持 WebAuthn ↗ 标准的硬件安全密钥。用户可以注册多个安全密钥。 |
| 生物识别 | 使用 WebAuthn ↗ 的内置设备身份验证器,包括 Apple Touch ID、Apple Face ID 和 Windows Hello。用户可以注册多个生物识别。 |
| 个人身份验证(PIV)密钥(仅限基础设施应用) | 在 SSH 连接期间用于公钥身份验证的 YubiKey PIV 密钥。需要 YubiKey 固件 4.3 或更高版本。此方法仅适用于基础设施应用程序。用户可以注册多个 PIV 密钥。 |
在您能够在应用程序和策略上强制执行独立 MFA之前,您必须在组织级别启用独立 MFA。
-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Access settings(Access 设置)。
-
在 **Allow multi-factor authentication (MFA)(允许多因素身份验证)**下,选择您要在组织中允许的 MFA 方法。
-
设置 Authentication duration(身份验证时长)。这决定了用户在无需再次提示进行 MFA 的情况下可以登录 Access 的时长。如果用户针对所需的身份验证器方法没有处于活动状态的 MFA 会话,则除了 IdP 身份验证之外,他们还必须完成 MFA。
-
(可选)为避免重复提示用户进行 MFA,您可以启用 Use identity provider MFA(使用身份提供商 MFA)。这将检查身份验证时从身份提供商传递的 AMR 值,如果该 AMR 值符合允许的 MFA 方法,则在配置的持续时间内不会提示用户进行 MFA。
-
(可选)要将您的 MFA 方法和身份验证时长应用于所有 Access 应用程序,请选择 Apply global MFA settings by default(默认应用全局 MFA 设置)。您可以针对单个应用程序和策略覆盖全局 MFA 设置。
-
选择 Save(保存)。
-
获取您现有的 Zero Trust 组织配置:
At least one of the following token permissions is required:Required API token permissions
Access: Organizations, Identity Providers, and Groups RevokeAccess: Organizations, Identity Providers, and Groups WriteAccess: Organizations, Identity Providers, and Groups Read
Get your Zero Trust organizationbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \ --request GET \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" -
发送
PUT请求以更新您组织的 MFA 设置。为了避免覆盖您现有的配置,PUT请求体应包含上一个GET请求返回的所有字段。
At least one of the following token permissions is required:Required API token permissions
Access: Organizations, Identity Providers, and Groups Write
Update your Zero Trust organizationbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \ --request PUT \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "auth_domain": "your-team-name.cloudflareaccess.com", "name": "Your Team Name", "mfa_config": { "allowed_authenticators": [ "totp", "biometrics", "security_key" ], "session_duration": "24h" }, "mfa_required_for_all_apps": false }'将
allowed_authenticators设置为一个包含以下一个或多个值的数组:totp— 身份验证器应用程序(基于时间的一次性密码)。biometrics— 生物识别(Touch ID、Face ID、Windows Hello)。security_key— 安全密钥(支持 WebAuthn 的硬件密钥)。piv_key— PIV 密钥(YubiKey)。
将
session_duration设置为持续时间字符串(例如,30m、1h、24h)。若要在每次访问时都要求进行 MFA,请使用0m。
在您启用独立 MFA 后,用户可以通过应用启动器来注册身份验证器。
如果您计划将 PIV 密钥用于基础设施应用程序的 MFA,请在组织的 Access 设置中配置 PIV 密钥要求。这些要求决定了用户可以注册哪些 PIV 密钥。
-
在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Access settings(Access 设置)。
-
在 **Allow multi-factor authentication (MFA)(允许多因素身份验证)**下,启用 **Personal Identity Verification (PIV) key(个人身份验证 [PIV] 密钥)**身份验证器。
-
配置以下设置:
设置 描述 选项 密钥类型 SSH 密钥算法 ECDSA, Ed25519, RSA 密钥大小 密钥长度(以位为单位) ECDSA: 256, 384, 521. RSA: 2048, 3072, 4096 PIN 策略 用户必须在何时输入其 PIV PIN never(从不)、once(每会话一次)、always(每次使用)触摸策略 用户必须在何时触摸硬件密钥 never(从不)、always(每次使用)、cached(缓存 15 秒)要求 FIPS 要求 PIV 密钥位于经过 FIPS 验证的设备上 true,false -
选择 Save(保存)。
一个 AAGUID ↗(验证器证明 GUID)是一个 128 位的标识符,用于指示 WebAuthn ↗ 身份验证器的制造商和型号。通过限制只能注册特定的 AAGUID 集合,您可以要求用户仅注册经批准的硬件,例如经过 FIPS 验证的安全密钥或公司分发的设备。
AAGUID 限制仅在注册时适用。Access 在用户注册身份验证器时验证 AAGUID,而不是在他们进行身份验证时。因此,AAGUID 限制是在组织级别配置的。
AAGUID 可使用列表进行管理。创建一个类型为 AAGUID 的列表,然后在您组织的 MFA 配置中引用该列表。
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Resources(资源)> Lists(列表)。
- 选择 Create new list(创建新列表)。
- 输入 **List name(列表名称)(例如,
Approved security keys)**和可选描述。 - 将 **List type(列表类型)**设置为 MFA AAGUID。
- 添加一个或多个 AAGUID 条目:
- 要添加预定义的 AAGUID,从 **Known authenticators(已知身份验证器)**列表中选择身份验证器。
- 要添加自定义 AAGUID,填写以下字段:
- MFA AAGUID — 身份验证器的 AAGUID,采用不带连字符的 32 字符十六进制格式(例如,
8c39ee867f9a4a959ba3f6b097e5c2ee)。 - Description(描述) — 可选标签,如身份验证器的名称和型号。
- MFA AAGUID — 身份验证器的 AAGUID,采用不带连字符的 32 字符十六进制格式(例如,
- 选择 Save(保存)。
发送一个 POST 请求以创建列表:
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/gateway/lists" \
--request POST \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
--json '{
"name": "Approved security keys",
"description": "AAGUIDs for MFA enrollment",
"type": "AAGUID",
"items": [
{
"value": "8c39ee867f9a4a959ba3f6b097e5c2ee",
"description": "YubiKey Bio Series - FIDO Edition (Enterprise Profile)"
}
]
}'响应中包含列表的 id(UUID)。当您将该列表分配给您组织的 MFA 配置时,请使用此 ID。
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Access settings(Access 设置)。
- 在 **Allow multi-factor authentication (MFA)(允许多因素身份验证)**下,转到 Restrict MFA to specific authentication methods(将 MFA 限制为特定身份验证方法)。
- 选择一个现有的 AAGUID 列表。
- 选择 Save(保存)。
保存后,仅可以注册其 AAGUID 出现在列表中的身份验证器。先前已注册且不在列表中的身份验证器的用户可以继续使用它们,直到它们被管理员删除。
-
获取您现有的 Zero Trust 组织配置:
At least one of the following token permissions is required:Required API token permissions
Access: Organizations, Identity Providers, and Groups RevokeAccess: Organizations, Identity Providers, and Groups WriteAccess: Organizations, Identity Providers, and Groups Read
Get your Zero Trust organizationbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \ --request GET \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" -
发送一个
PUT请求以分配列表。为了避免覆盖您现有的配置,PUT请求体应包含上一个GET请求返回的所有字段。将mfa_config.required_aaguids设置为您的 AAGUID 列表的 ID。
At least one of the following token permissions is required:Required API token permissions
Access: Organizations, Identity Providers, and Groups Write
Update your Zero Trust organizationbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \ --request PUT \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "auth_domain": "your-team-name.cloudflareaccess.com", "name": "Your Team Name", "mfa_config": { "allowed_authenticators": [ "security_key", "totp", "biometrics" ], "session_duration": "24h", "required_aaguids": "05ddacda-5131-41ab-9eeb-6763f8dce3be" } }'要移除限制,请将
required_aaguids设置为null。
如果您的身份提供商已提示用户进行 MFA,您可以配置 Access 接受该 MFA,而不是再次提示。Access 会检查由 IdP 返回的身份验证方法参考(AMR)声明,如 RFC 8176 ↗ 中所定义。如果 AMR 值与应用程序或策略的允许的身份验证器类型匹配,Access 将跳过独立 MFA 提示。
| AMR 值 | 匹配 Access 身份验证器类型 | 描述 |
|---|---|---|
hwk |
安全密钥 | 硬件密钥的所有权证明 |
swk |
安全密钥 | 软件密钥的所有权证明 |
otp |
身份验证器应用程序 | 一次性密码 |
face |
生物识别 | 面部识别 |
fpt |
生物识别 | 指纹 |
iris |
生物识别 | 虹膜扫描 |
retina |
生物识别 | 视网膜扫描 |
vbm |
生物识别 | 声纹生物识别 |
Access 会忽略无法映射到受支持身份验证器类型的 AMR 值(例如,pwd、sms、tel、geo、kba、sc、pin、user、mca、rba、wia)。
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Access settings(Access 设置)。
- 在 **Allow multi-factor authentication (MFA)(允许多因素身份验证)**下,启用 Use identity provider MFA(使用身份提供商 MFA)。
- 在 **Authentication Method Reference (AMR) match duration(身份验证方法参考 [AMR] 匹配时长)**下,设置成功的 IdP MFA 保持有效的时长。在此期间,用户可以登录 Access 而无需额外的 MFA 提示。您可以设置自定义持续时间(默认 24 小时),或者在每次登录时都检查有效的 AMR 值。
- 选择 Save(保存)。
-
获取您现有的 Zero Trust 组织配置:
At least one of the following token permissions is required:Required API token permissions
Access: Organizations, Identity Providers, and Groups RevokeAccess: Organizations, Identity Providers, and Groups WriteAccess: Organizations, Identity Providers, and Groups Read
Get your Zero Trust organizationbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \ --request GET \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" -
发送一个
PUT请求以更新您组织的 AMR 匹配设置。为了避免覆盖您现有的配置,PUT请求体应包含上一个GET请求返回的所有字段。
At least one of the following token permissions is required:Required API token permissions
Access: Organizations, Identity Providers, and Groups Write
Update your Zero Trust organizationbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \ --request PUT \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "auth_domain": "your-team-name.cloudflareaccess.com", "name": "Your Team Name", "mfa_config": { "allowed_authenticators": [ "totp", "biometrics", "security_key" ], "session_duration": "24h", "amr_matching_enabled": true, "amr_session_duration": "1h" } }'
Access 在以下情况下不应用 AMR 匹配:
- IdP 不返回
amr声明。 - IdP 仅返回无法映射到应用程序或策略的允许的身份验证器类型的 AMR 值。
- 用户的 AMR 匹配会话已过期,因为他们上一次通过其 IdP 执行 MFA 的时间早于配置的 AMR 匹配时长。
在这些情况下,Access 会回退到检查现有的 MFA 会话。如果没有有效的 MFA 会话,Access 会提示用户完成独立 MFA。
若要为组织关闭独立 MFA:
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Access controls(访问控制)> Access settings(Access 设置)。
- 在 **Allow multi-factor authentication (MFA)(允许多因素身份验证)**下,关闭 Apply global MFA settings by default(默认应用全局 MFA 设置)。
- 关闭所有 MFA 方法(生物识别、安全密钥和身份验证器应用程序)。
如果更新 MFA 设置时出错,请确保已从所有应用程序和策略中移除自定义 MFA 设置。
-
获取您现有的 Zero Trust 组织配置:
At least one of the following token permissions is required:Required API token permissions
Access: Organizations, Identity Providers, and Groups RevokeAccess: Organizations, Identity Providers, and Groups WriteAccess: Organizations, Identity Providers, and Groups Read
Get your Zero Trust organizationbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \ --request GET \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" -
发送一个带有空
allowed_authenticators数组的PUT请求。为了避免覆盖您现有的配置,PUT请求体应包含上一个GET请求返回的所有字段。
At least one of the following token permissions is required:Required API token permissions
Access: Organizations, Identity Providers, and Groups Write
Update your Zero Trust organizationbash curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/organizations" \ --request PUT \ --header "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \ --json '{ "auth_domain": "your-team-name.cloudflareaccess.com", "name": "Your Team Name", "mfa_config": { "allowed_authenticators": [] } }'
用户通过应用启动器注册身份验证器。
如果用户已注册至少一个身份验证器,Access 要求他们在添加新身份验证器之前使用现有的 MFA 方法进行验证。
若要注册身份验证器:
-
转到您组织的应用启动器,地址为
<your-team-name>.cloudflareaccess.com。 -
使用您的身份提供商或一次性 PIN 码(OTP)进行登录。
-
转到 Account(账户)> MFA devices(MFA 设备)> Add MFA device(添加 MFA 设备)。
-
如果您已经注册了 MFA 设备,请完成 MFA 验证提示。
-
选择您要注册的身份验证器类型,并按照屏幕上的说明进行操作。
身份验证器应用程序
- 选择 Authenticator app(身份验证器应用程序)。
- 使用您的身份验证器应用(例如 Google Authenticator、Microsoft Authenticator 或 Authy)扫描 QR 码。或者,您也可以手动将设置密钥输入到您的身份验证器应用中。使用 SHA1 作为哈希函数,并将时间步长大小设置为 30 秒。
- 输入身份验证器应用生成的 6 位数基于时间的一次性密码(TOTP)以验证注册。
安全密钥
- 选择 Security key(安全密钥)。
- 当浏览器提示您时,插入您的安全密钥并按照屏幕上的说明进行操作。
- 浏览器确认注册后,安全密钥即注册成功。
您可以注册多个安全密钥以备用。
生物识别
- 选择 Biometrics(生物识别)> Register biometrics(注册生物识别)。
- 系统会提示您使用设备上可用的身份验证器类型进行注册(例如,添加 macOS Touch ID 或 添加 Windows Hello)。
- 浏览器确认注册后,平台身份验证器即注册成功。
PIV 密钥(仅限基础设施应用程序)
PIV 密钥注册需要额外的客户端设置,并且仅用于基础设施应用程序的 MFA。有关完整说明,请参阅为基础设施应用注册 PIV 密钥。
您现在可以使用这些身份验证器登录您组织的应用程序。
PIV 密钥注册与上述常规身份验证器注册是分开的,并且需要额外的客户端设置。
在注册之前,您必须拥有固件为 4.3 或更高版本的 YubiKey,并且在 PIV 插槽 9a 中生成了一个密钥。如果您尚未生成 PIV 密钥,请参阅生成 PIV 密钥。
如果您的 YubiKey 上还没有 PIV 密钥,请在插槽 9a 中生成一个:
ykman piv keys generate \
--algorithm ECCP256 \
--pin-policy once \
--touch-policy always \
9a pubkey.pem当 YubiKey 闪烁时触摸它以确认密钥生成。然后创建一个自签名证书,使该密钥对 SSH 代理可见:
ykman piv certificates generate --subject "CN=SSH-Identity" 9a pubkey.pem生成密钥后,生成证明证书并继续进行注册。
证明证书可证明该密钥是在真实的硬件上生成的。运行以下命令从您的 YubiKey 导出它们:
ykman piv keys attest 9a leaf.pem
ykman piv certificates export f9 intermediate.pemleaf.pem包含插槽9a中密钥的公钥和元数据。intermediate.pem是 YubiKey 证明 CA 证书。
- 转到您组织的应用启动器,地址为
<your-team-name>.cloudflareaccess.com。 - 使用身份提供商(IdP)、一次性 pin 码,或以 Cloudflare 作为您的 IdP 进行登录。
- 转到 Account(账户)> MFA devices(MFA 设备)> Add MFA device(添加 MFA 设备)。
- 选择 PIV key(PIV 密钥)。
- 将
leaf.pem的内容粘贴到 **Leaf certificate(叶证书)**字段中。 - 将
intermediate.pem的内容粘贴到 **Intermediate certificate(中间证书)**字段中。 - 选择 Register(注册)。
Access 会从您的证书中提取并存储 SSH 公钥,以便日后向基础设施应用进行身份验证。您可以注册多个 PIV 密钥以备用。
注册后,将您的 SSH 客户端配置为使用 PIV 密钥。以下示例在 macOS 上使用 yubikey-agent。对于 Linux,请参阅 yubikey-agent 文档 ↗。
-
安装并启动
yubikey-agent:brew install yubikey-agent brew services start yubikey-agent -
从叶证书中提取 SSH 公钥:
openssl x509 -in leaf.pem -pubkey -noout | ssh-keygen -i -m PKCS8 -f /dev/stdin > ~/.ssh/id_yubikey.pub -
将以下内容添加到您的
~/.ssh/config中:Host * IdentityAgent /opt/homebrew/var/run/yubikey-agent.sock IdentitiesOnly yes AddKeysToAgent yes IdentityFile ~/.ssh/id_yubikey.pub -
验证密钥已加载:
ssh-add -L输出应显示一个
ecdsa-sha2-nistp256密钥。
用户可以从应用启动器中删除自己的身份验证器。如果用户已注册至少一个身份验证器,Access 要求他们在移除设备之前使用现有的 MFA 方法进行验证。
- 转到您组织的应用启动器,地址为
<your-team-name>.cloudflareaccess.com。 - 转到 Account(账户)> MFA devices(MFA 设备)。
- 选择 MFA 设备旁边的 3 点菜单,然后选择 Remove MFA device(移除 MFA 设备)。
- 如果您注册了其他 MFA 设备,请完成 MFA 验证提示。
管理员也可以代表用户删除身份验证器。
当用户已注册至少一个身份验证器时,Access 会要求在用户从应用启动器中添加或删除身份验证器之前进行 MFA 验证。此验证步骤与 IdP 登录是分开的,并且使用用户现有的独立 MFA 设备。
用户完成 MFA 验证后,他们有 10 分钟的时间来添加或删除身份验证器,而无需额外的提示。此窗口与当前设备绑定。10 分钟后,或者如果用户切换到其他设备,Access 会再次要求进行 MFA 验证。
这防止了拥有受损 IdP 凭据的攻击者修改用户已注册的身份验证器。即使攻击者获得了用户 IdP 会话的访问权限,如果他们不同时拥有用户已注册的身份验证器,也无法绕过独立 MFA 验证步骤。如果用户丢失了其唯一的身份验证器且无法验证,管理员可以将其删除以允许重新注册。请参阅管理用户身份验证器。
管理员可以查看和删除用户注册的身份验证器。这对于解决锁定问题或应对安全事件非常有用。
若要查看用户已注册的身份验证器:
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Team & Resources(团队与资源)> Users(用户)。
- 选择一个用户。
- 转到 MFA devices(MFA 设备)。每个条目都显示身份验证器的 ID、其用户配置的名称以及 MFA 方法。
如果用户被锁定,或者您出于安全原因需要撤销某个身份验证器,您可以从仪表板或 API 将其删除。
- 在 Cloudflare 仪表板 ↗中,转到 Zero Trust > Team & Resources(团队与资源)> Users(用户)。
- 选择要删除其身份验证器的用户。
- 在 **MFA devices(MFA 设备)**下,找到该身份验证器并选择 Delete(删除)。
下一次用户访问要求 MFA 的应用程序时,他们需要注册一个新的身份验证器。
发送一个 DELETE 请求以移除特定身份验证器:
curl "https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/access/users/$USER_ID/mfa_authenticators/$AUTHENTICATOR_ID" \
--request DELETE \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"参数:
user_id— 用户的 UUID。您可以在 Team & Resources(团队与资源)> **Users(用户)**下的用户详细信息中找到此 ID。authenticator_id— 身份验证器的唯一标识符。
如果用户失去了对其所有已注册身份验证器的访问权限:
- 删除该用户的身份验证器。
- 用户随后可以访问受保护的应用程序,并且会获得一个注册新身份验证器的链接。
- 或者,向用户共享直接注册链接:
<your-team-name>.cloudflareaccess.com/AddMfaDevice。