MFAPortal

Features

Everything below is included from the Business plan up unless marked otherwise. There is no separate module to license.

Authentication methods

MethodHow the user completes itNotes
TOTP6-digit code from an authenticator app, 30s window, one step of drift allowedDefault method. Works offline.
PushApp prompt with a number the user matches on screenRequires the mobile app. Number matching avoids approval fatigue.
WebAuthnSecurity key or platform authenticator, per deviceRecommended for administrators and finance roles.
SMS6-digit code by text messageOpt-in only, off by default, disabled for admin roles.
Recovery codes10 single-use codes issued at enrolmentGenerated once; not visible to administrators afterwards.

Enrolment

  1. Invitation

    The user receives an invitation naming your organisation and the group they belong to. The link is valid for seven days and can be reissued from the console.

  2. First device

    The user scans a code, confirms a 6-digit test code, and names the device. If your policy allows it, the first device is approved automatically; otherwise an administrator approves it.

  3. Second device

    Added from inside the account after signing in with the first device. A new device always triggers a notice to the account owner.

  4. Recovery

    Lost device: self-service recovery after a 10-minute delay, with an email notice to the account owner and an entry in the audit log. If that fails, an administrator override with a recorded reason.

Policy engine

Policies are written in the console, or applied through the API. A policy names the group and application it applies to and the method it requires:

policy: finance-admins
  applies_to: group:finance, group:it-admin
  require: webauthn
  session: 8h
  fallback: none
  recovery: admin_approval

Session lifetime runs from 1 hour to 12 hours. Break-glass accounts can be excluded by name, and their sign-ins are reported separately.

Directory sync and provisioning

Audit and reporting

API

GET   /v1/users?status=enrolled
POST  /v1/policies
GET   /v1/events?since=2026-09-01T00:00:00Z
POST  /v1/users/{id}/reset

Bearer token authentication, 600 requests per minute per tenant, cursor pagination. A sandbox tenant and the OpenAPI description come with the trial account.

What we do not do: we do not store password hashes, we do not proxy your application traffic, and we do not require a client agent on user devices. Only the authentication step passes through us.