Beta

Create a tenant

A new tenant starts with its own users, OAuth settings, audit history and logs. You are its first Tenant Admin.

BTL Admin

IDENTITY SECURITY · LAB

Close the weaker fallback with authentication policy

Find the least evidence that reaches Ava's account, then make the passkey replace her password through policy and confirm the sign-in page no longer accepts the weaker path.

Partly readyUses your lab tenant

The lesson

Builds on: Phishing and relayed sign-ins.

New to the labs? Start with the lab toolkit and the shared cast and names every lab uses.

Partly ready. Most of this lab runs today. Steps that wait on platform features are marked, and Missing infrastructure says what they need.

Your progress

Press Start before you begin. Only events your tenant records after that count, in the order below. Checking reads your tenant's Audit, so you need Audit read access in it.

  1. Ava signs in with password and code although she has a passkey

    Recorded as account.second_step succeeded (second_step_completed) about [email protected].

  2. Require the passkey and let it replace passwords

    Recorded as tenant.authentication.update succeeded.

  3. Ava's password is removed by the migration

    Recorded as account.enroll succeeded (method_removed) about [email protected].

  4. Ava's old password no longer signs her in

    Recorded as account.sign_in rejected (invalid_credentials).

  5. The validator refuses a policy that leaves no way in

    Recorded as tenant.authentication.update rejected.

Setup

  1. Press Start on this page.

  2. Confirm the track baseline in Authentication: Password Required, Authenticator app Optional, Passkey or security key Optional with Passwordless on, Second step enrolled.

  3. Confirm Ava has a password, an authenticator app and a passkey.

Walkthrough

  1. At $ISSUER/login, sign in as Ava with her password, not her passkey. When asked for a second step, choose the authenticator app and type the code.

Why it matters: the lesson's "choosing the weakest method on offer." Ava owns a passkey, but the sign-in completed without it. A relay that cannot use the passkey would steer her to exactly this path.

  1. Write the list the lesson asks for: every path into Ava's account and what each one requires. Include the password with an authenticator code, the passkey, a recovery code as a second step, a trusted browser if one is remembered, an administrator reset, and sessions and tokens that already exist.

Why it matters: the useful question is "what is the least evidence that gets someone in?", not "is MFA enabled?" Right now the answer is a password and a code, both of which a person types and a relay can forward.

  1. In Authentication, set Passkey or security key to Required with Replaces password on, set Password to Optional, and save. Read the message if the form refuses an order of changes; the validator explains which setting must change first.

Why it matters: the policy, not the sign-in page, decides which methods count. Required starts a forced migration, so users without a passkey enroll one at their next sign-in.

  1. Sign in as Ava with her passkey. Open $ISSUER/account/security and regenerate her recovery codes. Read the page again: her password is gone, and the method-changed notice is sent.

Why it matters: once a user holds the required method, the tenant removes the password it replaces at their next change of sign-in methods. It also ends her other browsers and OAuth grants, because those were issued while the weaker path existed.

  1. Sign out and try Ava's old password at $ISSUER/login. It is refused with the same "The email or password is incorrect" message as any wrong password.

Why it matters: this confirms the setting changed real runtime behavior for Ava. The password path does not just look hidden; the account no longer has a password to check.

  1. In Audit, source User directory, open the tenant.authentication.update event and read which policy sections changed. In Audit, source Protocol activity, find the account.enroll event with reason method_removed for Ava.

Why it matters: a change to authentication policy alters every account's weakest path at once, so it is a security event in its own right and must be recorded with who made it.

Break it

  1. In Authentication, try to save a policy that sets Password to Off and Passkey or security key back to Optional, so no sign-in method is Required. The tenant refuses it: turning passwords off needs another sign-in method set to Required, so every user has a way to sign in. Nothing was saved, so there is nothing to restore.

Check your work

  • Check my progress confirms the downgraded sign-in, the policy change, the password removal, the refused old password and the refused invalid policy, in that order.

  • The refused policy appears in Audit, source User directory, as tenant.authentication.update rejected with reason password_off_without_migration.

Cleanup

  1. Return the policy to the track baseline so later labs can use passwords: Passkey or security key Optional with Replaces password off, Password Required. The Layered defenses lab asks you to apply the passkey-required policy again.

  2. In Users, set a new administrator password for Ava and store it with read -rs AVA_PASSWORD.

Missing infrastructure

  • G20: relying parties cannot ask for an assurance level with acr_values, so an application cannot demand a phishing-resistant sign-in for itself. Once it exists, the lab will request acr_values from lab-collage and see a password sign-in refused for that client only.

  • G38: methods are tenant-wide, so "passkey required for finance staff only" cannot be expressed, and sensitive actions cannot require a phishing-resistant method. Once it exists, the lab will require a passkey for role holders and confirm Ben is asked for it while Cora is not.

  • G43: the tenant has no push approvals, so approval fatigue and number matching are context only. Text-message codes and SIM swaps are context only too, because the tenant sends no text messages.

Back to all labs

We value your privacy

We use cookies and similar technologies to enhance your browsing experience, and analytics to understand our traffic. By clicking "Allow All", you consent to optional analytics. Cookie Policy

The Lab