Skip to content

[Access] Document AAGUID restrictions and AMR matching for independent MFA#30252

Open
kennyj42 wants to merge 4 commits intocloudflare:productionfrom
kennyj42:kjohnson/independent-mfa-aaguid-amr
Open

[Access] Document AAGUID restrictions and AMR matching for independent MFA#30252
kennyj42 wants to merge 4 commits intocloudflare:productionfrom
kennyj42:kjohnson/independent-mfa-aaguid-amr

Conversation

@kennyj42
Copy link
Copy Markdown
Contributor

Summary

Documents two features added under SHIP-1287 (IdP Agnostic Multi-Factor Authentication) that shipped under RM-27743 but were not included in the initial docs PR (#29713):

  • AAGUID restrictions — Organization-level setting that limits which WebAuthn authenticators users can enroll, backed by a Cloudflare List of type AAGUID.
  • AMR matching — Organization-level setting that skips the independent MFA prompt when the identity provider already performed an equivalent MFA, using the amr claim defined in RFC 8176.

Also adds AAGUID to the list of supported Lists data types and cross-links both new sections from mfa-requirements.mdx.

Related

  • SHIP-1287 (Ann Ming) — Items pending update: AAGUID & AMR matching
  • RM-27743 — Access: Independent MFA supports AAGUID/AMR values (Closed)
  • Original docs PR: [ZT] Independent MFA #29713

Draft / needs review

A few things would benefit from confirmation from the Access team before merging. Flagged inline:

  1. API field names — I used mfa_config.required_aaguids, mfa_config.amr_matching_enabled, and mfa_config.amr_session_duration. The first is explicit in the Required AAGUIDs UI wiki page; the AMR field names are my best guess and may differ in the shipped API.
  2. Dashboard copyRequired AAGUIDs and Trust identity provider MFA (AMR matching) are placeholders; actual UI labels may differ.
  3. AMR value mapping table — I included only values that map to a supported Access authenticator type (security_key / biometrics / totp). Dropped mfa (flagged as open question in the wiki) and values the wiki marks as unsupported.
  4. Dashboard nav path for AAGUID lists — Used Zero Trust > Resources > Lists; please confirm that is where these lists live.

cc @asamborski for a review — happy to iterate on wording or restructure once the API surface is confirmed.

@kennyj42 kennyj42 marked this pull request as ready for review April 23, 2026 22:49
@@ -0,0 +1,14 @@
---
title: AAGUID restrictions and AMR matching for Access independent MFA
description: Restrict which WebAuthn authenticators users can enroll and skip redundant MFA prompts when the identity provider already performed MFA.
Copy link
Copy Markdown

@sha-e-512 sha-e-512 Apr 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

AMR matching is available for all MFA methods, but this sentence makes it sound like it's only available for WebAuthn-backed authenticators i.e., it can be used for TOTP in addition to biometrics, and security keys.

We should reword this sentence to the following to improve readability:

"Restrict which WebAuthn authenticators users can enroll and allow users to skip redundant MFA prompts when they have already performed MFA using their IdP"

3. Select an existing [AAGUID list](#create-an-aaguid-list).
4. Select **Save**.

After you save, only authenticators whose AAGUIDs appear in the list can be enrolled. Users with previously enrolled authenticators outside the list can continue to use them until an administrator deletes the device.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"device" makes me think of a ZT device, and not an authenticator: use "MFA device" or reword the sentence to "Users with previously enrolled authenticators outside the list can continue to use them until they are deleted by an administrator."

Also, add a link to the section where we explain how an administrator can delete MFA devices (under " Delete an authenticator").

- [Required AAGUIDs](#restrict-authenticators-by-aaguid) is set at the organization level. AAGUID information is not present in the IdP's AMR claim, so Access cannot verify that the IdP's MFA came from an approved device.
- The IdP does not return an `amr` claim.
- The IdP returns only AMR values that do not map to an [allowed authenticator type](#supported-mfa-methods) for the application or policy.
- The user's last IdP MFA is older than the configured AMR session duration.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could reword this as: "The user's AMR matching session has expired because they last performed MFA via their IdP too long ago".

- The IdP returns only AMR values that do not map to an [allowed authenticator type](#supported-mfa-methods) for the application or policy.
- The user's last IdP MFA is older than the configured AMR session duration.

In these cases, Access prompts the user to complete independent MFA.
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It depends.
We will fall back to checking for existing MFA sessions. If there are no valid MFA sessions, then the user will be prompted to perform independent MFA.


1. In the [Cloudflare dashboard](https://dash.cloudflare.com/), go to **Zero Trust** > **Access controls** > **Access settings**.
2. Under **Allow multi-factor authentication (MFA)**, turn on **Use identity provider MFA**.
3. Under **Authentication Method Reference (AMR) matching duration**, set how long a successful IdP MFA remains valid. During this period, users can log in to Access without an additional MFA prompt. You can set a custom duration (default 24 hours) or check for a [valid AMR value](#supported-amr-values) on every login.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this accurate from a user experience perspective?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants