Skip to main content
MFA / 2FA Enforcement for Odoo — A build-to-order Odoo module that turns two-factor authentication from an optional user pref — 1/1Illustrative preview

A build-to-order Odoo module that turns two-factor authentication from an optional user preference into an

enforced org-wide policy — mandating TOTP or passkeys per security group, with enrollment grace periods, admin-managed backup codes, and trusted-device controls.

ECOSIRE builds, installs, and supports it for your Odoo 17, 18, or 19 database.

What is MFA / 2FA Enforcement for Odoo?

A build-to-order Odoo module that turns two-factor authentication from an optional user preference into an enforced org-wide policy — mandating TOTP or passkeys per security group, with enrollment grace periods, admin-managed backup codes, and trusted-device controls. ECOSIRE builds, installs, and supports it for your Odoo 17, 18, or 19 database. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $999.00 USD; request a quote for a scoped proposal.

Key Features

Group-scoped enforcement policies binding a mandatory-2FA flag to `res.groups`, so you require a second factor org-wide or per security group (e.g. Accounting, Settings admins) while leaving chosen groups optional
Extends Odoo core `auth_totp` rather than replacing it — the proven TOTP secret and verification stay intact; the module adds the governance and enforcement layer above it
Configurable enrollment grace period with a defined countdown per user, after which access is hard-locked until a second factor is set up
WebAuthn / passkey (FIDO2) second-factor support for platform and hardware authenticators, offered alongside authenticator-app TOTP
Admin-managed backup recovery codes with one-time-use tracking, per-user regeneration, and a used/remaining count surfaced in the UI
Trusted-device 'remember this browser' with an administrator-set maximum duration and per-user, per-device revocation
Admin reset of a user's 2FA for lost-device recovery — writing a `mail.thread` audit entry — without performing a full user reset
Compliance dashboard (OWL/QWeb) showing enrollment status across all users, filterable by group, with computed `@api.depends` state fields
Login enforcement applied at the authentication controller and session layer, refusing internal and portal logins that skip 2FA when policy requires it, including RPC/session paths
Step-up re-authentication that demands a fresh second-factor challenge before sensitive admin actions such as Settings changes
Automated admin alert emails via the `mail` framework when a user disables or resets their own second factor
Scheduled reminder emails through `ir.cron` to users still not enrolled once their grace period has started
Access governed by `ir.model.access.csv` plus record rules so policy configuration and the audit log are visible only to the intended administrative roles
Built and tested for your target Odoo 17.0, 18.0, or 19.0 database, with Community vs Enterprise differences accounted for during scoping

Built to order, done for you

No DIY setup — a working app, built, installed and supported by ECOSIRE.

  1. 1

    You order

    Start with a one-time build price. We scope it with you at kickoff.

  2. 2

    We build & install

    ECOSIRE builds, configures and installs it on your Odoo.

  3. 3

    Go live + support

    You go live in about one working week, with two weeks of go-live support. Defects in the code we deliver are fixed free of charge.

Technical Specifications

Odoo Compatibility
Odoo 17, Odoo 18, Odoo 19
Editions
Enterprise & Community
License
Licence confirmation required
Python Requirement
Python 3.10+
Database
PostgreSQL 12+

About this Product

Odoo ships two-factor authentication through the core auth_totp module, but it is fundamentally opt-in: each user decides for themselves whether to enable it from their preferences. For a security-conscious organisation — one pursuing SOC 2, ISO 27001, or an insurer's cyber questionnaire — "some users have 2FA turned on" is not a controllable state. An auditor asking "prove every account with access to financial and HR data uses a second factor" cannot be answered from the standard setup, and an administrator has no supported way to require enrollment, no visibility into who is covered, and no lever to block a login that skipped the second factor. This is exactly where Odoo native runs out of road, and where a bolt-on policy layer is needed.

We build a clean-room enforcement module that extends auth_totp rather than replacing it, so you keep Odoo's proven TOTP mechanism and add governance on top. At the data layer we introduce policy models (models.Model with @api.depends computed enrollment states) that bind a 2FA requirement to res.groups, letting you mandate a second factor org-wide or scope it to specific security groups — for example, require it for Accounting and Settings administrators while leaving read-only portal users optional. A configurable enrollment grace period gives users a defined window to set up their authenticator before access is hard-locked, driven by scheduled automated actions (ir.cron) that send reminder emails through the mail framework to anyone still not enrolled. Beyond authenticator-app TOTP, we implement WebAuthn / passkey (FIDO2) support so phishing-resistant hardware and platform authenticators can serve as the second factor. Enforcement is applied at the authentication controller and session layer — overriding the web login flow and the relevant RPC/session paths — so a login that bypasses 2FA when policy requires it is refused rather than merely discouraged, and step-up re-authentication can be demanded before sensitive administrative actions such as Settings changes.

Around the core enforcement we build the operational tooling security teams actually need day-to-day. A compliance dashboard (OWL/QWeb views backed by computed fields) shows enrollment status across every user, filterable by group, so the "who is covered" question has a one-screen answer. Administrators can generate and regenerate one-time-use backup recovery codes with usage tracking, and reset a specific user's 2FA for lost-device recovery — each action writing an audit entry via mail.thread so the reset is attributable and reviewable, without resorting to a full user reset. Trusted-device "remember this browser" is included with an administrator-set maximum duration and per-user revocation, and admins receive notification alerts whenever a user disables or resets their own second factor. Access is governed through ir.model.access.csv and record rules so that policy configuration and the audit trail are visible only to the roles that should see them.

Because this is a build-to-order engagement, nothing is a pre-existing download. After a short scoping call we confirm your Odoo version (17.0, 18.0, or 19.0), Community or Enterprise edition, which groups must be enforced, your grace-period and trusted-device policies, and any SSO or provisioning systems already in play. We then build against your target version, validate on a staging copy of your database through UAT, and deliver installable source with a documented rollback plan before touching production. Typical delivery is one working week from confirmed scope. Pricing starts from $999 (indicative, single-company base scope); multi-company enforcement, passkey/FIDO2 hardware rollout across many sites, deeper SSO or identity-provider integration, and larger user-migration volumes increase the quoted scope. You receive a fixed quote after the scoping call — the from-price is a starting point, not a firm figure.

What you get

  • Installable source code for your Odoo major version (17.0, 18.0, or 19.0), built clean-room extending core `auth_totp`
  • Installation and configuration on your staging environment, including group policy, grace-period, and trusted-device setup
  • Technical documentation: module architecture, models, enforcement points, and configuration reference
  • Administrator and end-user guide plus a live training session for your admin/compliance owners
  • UAT sign-off on a staging copy of your database with a documented, tested rollback plan before production go-live
  • Post-go-live support window for defect fixes and configuration adjustments
  • Private git repository handover with full commit history and `__manifest__.py` version pinned to your Odoo release

Who this is for

Security & Compliance Owner

Responsible for SOC 2 or ISO 27001 controls and needs to guarantee — and evidence — that every account with sensitive access uses a second factor. Buys this to turn 2FA from an opt-in preference into an enforced, auditable policy with a coverage dashboard they can screenshot for auditors.

Odoo System Administrator

Runs the day-to-day Odoo instance and handles account lifecycle. Needs supported tooling to mandate enrollment per group, hand out and regenerate backup codes, reset a locked-out user's 2FA after a lost device, and revoke trusted devices — all without hacking the database or fully resetting users.

IT Director / CISO

Accountable for the organisation's authentication posture across systems. Wants phishing-resistant passkeys as an option, step-up re-auth on privileged actions, and alerting when users weaken their own security, so Odoo access aligns with the wider identity and access policy.

Managed-Service / ERP Partner

Delivers Odoo to multiple end clients and needs a consistent, reusable enforcement layer with clean source and a git handover, so 2FA governance can be standardised across engagements rather than reinvented per project.

How MFA / 2FA Enforcement for Odoo Compares

CriterionECOSIRECustom BuildCompetitorOdoo Native
2FA enforcement scopeOrg-wide or per `res.groups`, policy-drivenWhatever you specify and can maintainOften global on/off, limited group logicOpt-in per user; cannot be required
Enrollment grace periodConfigurable countdown with cron reminders then hard-lockBuildable but you own the scheduler logicSometimes present, rarely configurableNone — no concept of required enrollment
Passkey / FIDO2 second factorWebAuthn passkeys alongside authenticator TOTPPossible with significant effortUsually TOTP-onlyTOTP only
Compliance coverage viewDashboard of enrollment status filterable by groupOnly if you build and maintain the reportsBasic or absentNo coverage reporting
Backup codes & admin resetOne-time-use codes, regenerate, audited admin resetDepends entirely on build scopeCodes sometimes, audited reset rareBasic recovery, no per-user admin reset workflow
Step-up re-authenticationFresh challenge before sensitive admin actionsCustom hook work requiredRarely offeredNot available
Ownership & supportFull source, git handover, support window, version-pinnedYou own all maintenance and future upgradesVendor-locked; upgrades on their timelineMaintained by the platform, but no policy layer
Delivery modelBuild-to-order, UAT on staging, rollback plan, one working weekTimeline and quality depend on your teamInstant install but generic fitAlready present, but insufficient for enforcement

Frequently Asked Questions about MFA / 2FA Enforcement

How long does delivery take?

This is a build-to-order module, not an instant download. After a scoping call to confirm your Odoo version, edition, enforced groups, and policies, typical delivery is one working week from confirmed scope. We build against your target version, validate on a staging copy through UAT, and only then deploy to production with a rollback plan in place.

Doesn't Odoo already include two-factor authentication?

Odoo core (`auth_totp`) provides TOTP, but it is opt-in per user — each person chooses whether to enable it, there is no way to require it, no coverage visibility, and no supported block on logins that skip it. We extend that same core mechanism with org-wide and per-group enforcement, grace periods, a compliance dashboard, backup-code and reset tooling, passkeys, and step-up re-auth. We keep Odoo's proven TOTP and add the governance layer around it.

How does pricing and scoping work?

Pricing starts from $999 as an indicative, single-company base-scope figure — a starting point, not a fixed price. Drivers such as multi-company enforcement, passkey/FIDO2 hardware rollout, deeper SSO or identity-provider integration, and larger user-migration volumes increase the quoted scope. After the scoping call you receive a fixed written quote for your exact requirements.

What about support and updates after go-live?

Every engagement includes a post-go-live support window for defect fixes and configuration adjustments, and you receive the full source via a private git repository so your team retains ownership. Because the module is version-pinned in its `__manifest__.py`, migrating it to a future Odoo release (for example 18.0 to 19.0) is handled as a separate scoped update; we can quote that when you plan the upgrade.

Will this work with Odoo Community, or only Enterprise?

It is built on core modules (`base`, `web`, `auth_totp`, `mail`) available in both editions, so it works on Community and Enterprise. We confirm your edition during scoping because some surrounding behaviours differ between the two, and we build and test against your specific edition and major version (17.0, 18.0, or 19.0).

Can it enforce 2FA on API and portal logins, not just the web UI?

Yes. Enforcement is applied at the authentication controller and session layer rather than only the browser login form, so internal, portal, and RPC/session authentication paths that skip a required second factor are refused. We also implement step-up re-authentication so a fresh second-factor challenge can be required before sensitive administrative actions such as Settings changes.

What happens when a user loses their authenticator device?

There are two recovery paths built in. Users can consume one of their admin-issued, one-time-use backup recovery codes, and administrators can reset an individual user's 2FA for lost-device recovery — which writes an audit entry via `mail.thread` — without resetting the whole user account. Admins can also revoke trusted devices per user, and are alerted when a user disables or resets their own second factor.

Request a quote

MFA / 2FA Enforcement

A build-to-order Odoo module that turns two-factor authentication from an optional user preference into an enforced org-wide policy — mandating TOTP or passkeys per security group, with enrollment grace periods, admin-managed backup codes, and trusted-device controls. ECOSIRE builds, installs, and supports it for your Odoo 17, 18, or 19 database.

  • Group-scoped enforcement policies binding a mandatory-2FA flag to `res.groups`, so you require a second factor org-wide or per security group (e.g. Accounting, Settings admins) while leaving chosen groups optional
  • Extends Odoo core `auth_totp` rather than replacing it — the proven TOTP secret and verification stay intact; the module adds the governance and enforcement layer above it
  • Configurable enrollment grace period with a defined countdown per user, after which access is hard-locked until a second factor is set up
  • WebAuthn / passkey (FIDO2) second-factor support for platform and hardware authenticators, offered alongside authenticator-app TOTP

Request a Quotation

Tell us about your MFA / 2FA Enforcement requirements and we'll send pricing, licensing options and a tailored proposal — usually within one business day.

No payment now. This sends a quote request to our team — we'll follow up by email with pricing and next steps.