Skip to content

feat: add TOTP/MFA support for local controller auth#10

Open
mi-skam wants to merge 2 commits intovedanta:mainfrom
mi-skam:feat/mfa-totp-support
Open

feat: add TOTP/MFA support for local controller auth#10
mi-skam wants to merge 2 commits intovedanta:mainfrom
mi-skam:feat/mfa-totp-support

Conversation

@mi-skam
Copy link

@mi-skam mi-skam commented Mar 8, 2026

Summary

  • Adds UNIFI_CONTROLLER_TOTP env var to pass a TOTP code during local controller login
  • UDM controllers with MFA-enabled SSO accounts return HTTP 499 requiring a token — this handles that flow
  • Returns a clear error message when MFA is required but no token is provided

Context

UDM controllers where the admin account has MFA enabled (via UI.com SSO) reject /api/auth/login with status 499 and MFA_AUTH_REQUIRED. The fix includes the token field in the login payload when UNIFI_CONTROLLER_TOTP is set.

Once authenticated, the session cookie is cached (existing behavior), so the TOTP is only needed for the initial login.

Test plan

  • Tested against UDM Pro with MFA-enabled SSO account
  • Verified ui local health, ui local devices list, ui local clients list, ui local networks list all work after auth
  • Verified non-MFA accounts still work (token field is omitted when not set)

🤖 Generated with Claude Code

mi-skam and others added 2 commits March 8, 2026 17:49
UDM controllers with SSO accounts that have MFA enabled return HTTP 499
requiring a TOTP token. This adds UNIFI_CONTROLLER_TOTP env var support
to pass the token during login, and proper error messaging when MFA is
required but no token is provided.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The status command called login() directly, bypassing the session cache.
This forced a fresh auth on every invocation, which breaks MFA accounts
since a new TOTP code would be needed each time. Changed to
ensure_authenticated() which reuses the cached session when valid.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant