MFA for LDAP and RADIUS clients in authentik

Add a second factor to LDAP and RADIUS clients in authentik by appending codes to the password, with Duo, TOTP and static tokens supported and SMS not supported on RADIUS.

On this page

MFA for LDAP and RADIUS clients in authentik: what it does and when you need it

authentik can enforce a second factor for LDAP and RADIUS clients by appending one-time codes or authenticator responses to the password. This matters for legacy applications, network gear and VPNs that bind over LDAP or RADIUS and have no way to show a web MFA prompt. The user types a single password field, and the code travels with it. If your estate contains clients like these, a web-only MFA rollout leaves them as the weakest entry point to your directory, so the question is which of them need the second factor and which factor each one can carry.

The LDAP provider runs binds through an authentik flow, so the same stages and policies that govern web logins also apply to LDAP binds. That means a single set of rules for lockouts, device restrictions and conditional access rather than a separate policy for directory traffic. For RADIUS, the provider's authenticator validation supports Duo, TOTP and static authenticators. The user enters the password, then a semicolon, then the code, for example password;123456 (illustrative). SMS authenticators are not supported on this path, so any device or network client that depends on SMS delivery needs a different plan. Before you commit, confirm each client's password field length limit and whether it strips or rejects the semicolon character, because a client that cannot send the separator cannot use this method.

Decide per client before you enable anything. Identify which applications and devices can accept a combined password and code, which ones need Duo push because they cannot take typed codes, and which should stay on a directory-only bind until they are replaced. Ask each vendor whether their LDAP or RADIUS client supports a code appended to the password and whether it caches credentials, since caching can quietly bypass a prompt you expected to see. Plan a test bind for each client against a non-production authentik instance, and verify that a failed code is rejected and logged before you apply the policy to production users.

Which second factor fits LDAP and RADIUS clients

This table compares the second factors authentik can apply to LDAP and RADIUS binds, with the user experience and recovery path for each. Read the confirmation column first, because whether a factor works depends on whether your client can send a password followed by a code or push request in one credential string. The main takeaway is that RADIUS does not support SMS, and that every option needs a planned fallback before rollout.

OptionUser experienceRecoveryConfirm in your client
Duo pushUser approves a push on a registered device after entering the passwordHandled through Duo enrollment and device management, so a lost phone needs Duo-side resetWhether the client can trigger a push from a single credential string
Duo passcodeUser appends a Duo passcode to the password in the bind or login fieldSame Duo enrollment path as push, plus any passcodes the user already holdsMaximum password length, since the appended code counts toward it
TOTPUser appends the six-digit app code to the password, separated by a semicolon on RADIUSRe-enroll a new authenticator app through the enrollment flow, ideally with a fallback in placeSupport for the separator format and whether the code can be entered without a prompt
Static tokensUser appends a pre-issued code from a list to the passwordServes as the fallback itself, so storage, issuance and reissue procedures need an ownerWhether the client accepts repeated typing of the same secret format for each login
SMS codesNot supported for RADIUS, so the option is unavailable on those clientsNot applicable for RADIUS, and LDAP use needs separate confirmation against the current documentationConfirm SMS support for LDAP flows before planning around it
Email codesNot covered in the supplied RADIUS documentation, so use is unconfirmedDepends on mailbox access and the email factor's recovery settingsConfirm RADIUS and LDAP support with authentik before committing to this method
Hardware keys (WebAuthn)Generally needs a browser interaction, which most bind-based clients do not provideWould need a separate fallback because keys cannot be used in a plain bindConfirm with the client vendor whether any bind-based client can use a security key

Setting up MFA on an authentik LDAP or RADIUS provider

This sequence turns a plain password bind into a password-plus-code check that runs through an authentik flow, so LDAP and RADIUS clients enforce the same policies as web logins. Each step ends with a check that tells you whether the next step can start.

  1. Confirm the authenticator devices for each user

    Decide which authenticator types the LDAP or RADIUS clients will accept, then confirm that test users have enrolled devices of those types. For RADIUS, the supported types are Duo, TOTP and static authenticators, and SMS is not supported, so SMS should not be part of the design. Create a test TOTP device for a pilot user in the authentik admin interface and confirm it appears under that user's devices. Done means the pilot user has at least one working device of an accepted type.

  2. Create the authenticator validation stage

    Create an authenticator validation stage in the admin interface and select only the device classes your clients support. Set the not-configured action so that users without an enrolled device are handled as your policy requires, and review the stage settings before attaching it to any flow. Done means the stage saves with the intended device classes, and a test validation against the pilot user's TOTP device returns success with a valid code.

  3. Build a dedicated bind flow with password then validation

    Create a flow for LDAP and RADIUS authentication, separate from the web login flow, so changes to browser logins do not change bind behavior. Add an identification stage, a password stage, and then the authenticator validation stage, in that order, and bind the flow's policies to the clients that use it. Done means the flow shows the three stages in the intended order and a preview run asks for the password and then the code.

  4. Bind the flow to the LDAP or RADIUS provider

    Open the LDAP or RADIUS provider and set its authentication flow to the dedicated flow. For LDAP, also confirm the bind flow setting, since the provider documentation states that binds run through a flow and the same policies as web logins then apply. For RADIUS, confirm how the client sends the code: after the password, separated by a semicolon. Done means the provider saves with the new flow, and the outpost has picked up the change.

  5. Test a bind with a valid code

    From a test client on the network path your applications use, bind as the pilot user with the password followed by a current TOTP code, in the format your RADIUS or LDAP client expects. Confirm the bind succeeds and that the user can read only the attributes the client is meant to read. Done means the bind succeeds with a current code and the user's session or access matches what you designed.

  6. Test rejection of a wrong code

    Repeat the bind with the correct password and an incorrect code, then with the correct password and no code. Both attempts should fail, and the client should show a clear rejection rather than a fallback to password-only access. Also confirm that a correct code with a wrong password fails. Done means every incorrect combination is rejected and none of them grants access.

  7. Review logs and test each client

    Check the authentik event log for the successful and failed attempts you just made, and confirm each entry records the flow, the user, and the outcome. Then repeat the valid and invalid tests in every client application that will use the provider, since client behavior around prompts and code formats varies. Confirm failed attempts appear in the log before you move users onto the flow. Done means every client has passed both tests and the log shows the expected entries for each.

Client patterns: separating appliances, VPNs and applications

RADIUS clients send the username and password in a single access request, and authentik expects any second factor to follow the password in that same field. The RADIUS provider supports Duo, TOTP and static authenticators, and SMS authenticators are unsupported, so plan around those three types only. Build a dedicated flow for each appliance group so that changes to a VPN policy do not alter browser logins.

  • Flow design: Create a RADIUS provider bound to a flow that includes an authenticator validation stage, then attach it to the outpost the appliance can reach.
  • Code format: Users type the password, a semicolon, then the code, for example password;123456 (illustrative). Confirm that the appliance does not strip or escape the semicolon.
  • Authenticator choice: TOTP and static codes are typed by the user. Confirm with the Duo documentation which Duo method works for your appliance before promising push prompts.
  • Shared secret and reachability: Verify that the shared secret, port and source addresses on the appliance match the provider settings before any user tests.
  • Failure behavior: Check how the appliance reports a wrong code, an expired code and a timed-out Duo request, because some devices show these as the same generic failure.

Before rollout, pilot one account per appliance and test a correct code, a wrong code and a replayed code, then confirm the appliance's own lockout settings.

Security risks of code-based MFA on legacy bind protocols

LDAP and RADIUS clients send credentials in a single bind or access request, so the password and the one-time code travel together and the client often controls retries. The risks below connect at that point: each one changes how much protection the second factor actually adds, and each has a control you can set and verify in authentik.

Guessing attacks on appended codes

With LDAP or RADIUS, the user's password and code arrive as one string, so an attacker can try many password and code combinations from a single client. Code-based factors have a short lifetime and a small value space, which makes throttling and lockout settings the main defense. Check how many failed attempts each authenticator tolerates, whether failures count per user or per source address, and whether the bind flow applies reputation policies before the code is checked.

Static token reuse

Static authenticators hold fixed codes, so a copied code works until someone removes or replaces it. Treat them as recovery material rather than daily second factors for legacy clients. Confirm who can issue static tokens, where they are stored, how they are shown to users once, and how quickly an administrator can revoke a set after a suspected leak.

Service accounts that skip MFA

Bind accounts used by applications to read directories often cannot answer a code prompt, so teams exempt them from MFA policy. Those accounts then become a password-only path to the same directory data. Inventory every bind identity, restrict it to read scopes and source networks, and keep it out of the user-facing flow that carries the second factor.

Cleartext or weak LDAP and RADIUS transport

A bind over plain LDAP or a RADIUS request without a protected tunnel exposes the password and code to anyone on the path. Confirm that the client, the outpost and the network segment all use encrypted transport, and that certificate validation is enforced on the client side rather than skipped for convenience. Test the path with a packet capture in a lab before users depend on it.

Shared secret management for RADIUS

RADIUS clients authenticate to the server with a shared secret, and that secret protects the authentication exchange between each NAS device and the server. Secrets copied into many devices, rarely rotated, or stored in configuration files with broad read access weaken every factor behind them. Record which devices hold each secret, set a rotation procedure, and confirm the secret is unique per client.

Failed bind alerting

A spike of failed binds or code rejections is often the first visible sign of guessing, a misconfigured client or a locked-out user. Without alerts on failed authentication events, these patterns stay in logs nobody reads. Decide which events to forward, which thresholds page someone, and who responds, and test the alert with a deliberately failed bind from a non-production client.

Questions buyers ask about MFA for LDAP and RADIUS in authentik

Does SMS work as a second factor over RADIUS in authentik?

No. According to the authentik RADIUS provider documentation, the authenticator validation for RADIUS supports Duo, TOTP and static authenticators, and SMS authenticators are not supported. If your users depend on SMS codes today, plan for a different second factor on RADIUS clients, such as TOTP, Duo or static codes, and confirm the current list in the authentik RADIUS provider documentation before you commit to a design. Email codes and SMS codes are also worth checking against the RADIUS flow in your own test environment, since the supported list is the vendor's statement and your client may add its own constraints.

What does the client team need to provide for an LDAP or RADIUS MFA rollout?

The client team usually provides the list of applications that bind over LDAP or RADIUS, the network paths from those clients to the authentik server, a test account set, and an owner who can change each client's bind or authentication settings. Each application also needs a decision about how users type their credentials, because code-based MFA is appended to the password in many RADIUS clients, which changes the login experience. Ask the implementation partner to list these inputs in the written scope, and confirm with each application vendor whether its LDAP or RADIUS client accepts the separator format authentik expects.

How long does a pilot take, and what makes it longer?

The duration depends mainly on how many client applications are in scope, how many of them use RADIUS versus LDAP, and whether each one can be tested with a real user flow. A single LDAP application with one bind flow is much simpler than several RADIUS clients that each handle the appended code differently. Other drivers include the number of second factors being offered, whether Duo credentials and user imports are needed, and how quickly your security team approves the bind flow design. This page does not supply a fixed duration, so ask for a timeline in the written scope that lists each application and the test cases it must pass.

Can our in-house team set up MFA for LDAP and RADIUS clients without a partner?

Yes, if your team has experience with authentik flows and policies, the LDAP and RADIUS providers and your client applications' authentication behavior. The work is less about the authentik settings than about testing each client, because the same policies apply to LDAP binds as to web logins, but every RADIUS client may format the password and code differently. Teams without a test lab, a plan for rollback and someone who can read authentik logs during failed binds often find that the first pilot takes longer than expected. A partner can take the testing and documentation load, while your team keeps ownership of the final configuration.

Does the open-source edition of authentik include MFA for LDAP and RADIUS?

The authentik pricing page lists an Open Source edition at no cost with community Discord support, and it lists enterprise-only features such as Google Workspace and Microsoft Entra ID integrations, mTLS client certificate authentication, privileged access management, password history, enhanced audit logging and ticket-based support. MFA for LDAP and RADIUS is not on that enterprise-only list, but the supplied facts do not confirm which features each edition includes in detail. Check the current authentik pricing page and the license terms in the repository against your exact requirements before you assume a feature is available in the open-source edition.

What cost components should a quote for this work cover?

A quote usually splits into planning and design, configuration of the authentik flows and providers, testing against each LDAP or RADIUS client, documentation and handover, and any work on third-party services such as Duo accounts or an SMS gateway. Some costs are one-time, such as the pilot and the initial configuration, while others recur, such as updates, monitoring and support for new applications. Authentik hosting costs also belong in the comparison, since the Docker Compose guide calls for at least 2 CPU cores and 2 GB of RAM for small-scale production, and Kubernetes deployments need a separately managed PostgreSQL for production. Ask for each cost line to name its owner, and for any third-party license to be shown separately.

Which bind flow design choices affect security the most?

The most important choice is whether the LDAP provider's bind goes through a flow that includes the authenticator validation stage, because authentik applies the same policies to LDAP binds as to web logins. Other choices include which second factors each client can accept, how remembered-device or validation thresholds apply to non-interactive binds, and how failed attempts are throttled and logged. Make these decisions with your security team before testing, and record them in the written scope so auditors can trace each rule to a decision.

How DeployOpen scopes an LDAP and RADIUS MFA rollout

Scope starts with an inventory of every client that binds over LDAP or RADIUS, because the second factor that works for one client may not work for another. For each application, record the protocol, the bind method, whether the client can send a code after the password, whether it caches sessions, and which users and groups authenticate through it. The inventory determines the design: RADIUS clients can take Duo, TOTP and static authenticators with the code appended after the password and separated by a semicolon, but SMS is not supported on RADIUS, so any client that depends on SMS needs a decision before work starts. Confirm each client's behavior with its vendor or your own test environment rather than assuming it.

The second part of scope is the flow design and the test plan. The authentik LDAP provider runs code-based MFA through a flow, so the same policies that govern web logins can apply to directory binds, and the RADIUS provider uses its own authenticator validation settings. DeployOpen scopes the flow configuration for each protocol, the test cases for each client (successful bind, wrong code, missing code, lockout behavior, service accounts that must not prompt for a second factor) and the change windows needed to test without disrupting production users. Ask for a named owner on the client side who can confirm results for each application.

The written deliverable is agreed before work starts. Clients typically provide access to their authentik and client test environments, test accounts with known enrollment state, the list of stakeholders who approve cutover, and change windows for each application. DeployOpen delivers the flow and provider configuration, test evidence for each client and protocol, and a runbook covering enrollment, lockout recovery and rollback. Ask any partner for the exact list of deliverables, the acceptance criteria and what happens if a client cannot support the chosen method, since that outcome changes both scope and schedule.

How DeployOpen works on this

DeployOpen scopes, builds and hands over second factors for LDAP and RADIUS clients in authentik as written, fixed-scope work inside your own infrastructure. We map each legacy client to the bind or RADIUS flow it can actually use, then test the code-after-password behavior before anything reaches production users.

How we scope

  • Inventory every LDAP and RADIUS client, its bind method, and whether it accepts a password followed by a code
  • Confirm which authenticators apply per client, such as Duo, TOTP or static codes, and record SMS as out of scope for RADIUS
  • Agree the flow design, policies and user populations in a written scope before any build starts
  • Name the owners to confirm vendor behavior for each client, since client-side support varies

How we build

  • Design separate LDAP and RADIUS bind flows so the same policies as web logins apply to legacy clients
  • Configure the RADIUS provider's semicolon-separated password and code format and test it with each client
  • Set throttling and failure handling for code-based attempts on every legacy path before go-live
  • Run test accounts through success, wrong-code, lockout and missing-enrollment cases in a non-production instance

How we hand over

  • Deliver flow, stage and policy configuration documentation with a per-client MFA behavior record
  • Provide a runbook for enrolling users, resetting authenticators and diagnosing failed legacy binds
  • Walk your operations team through the test results and the known limits of each client
  • Record which items you must confirm with each client vendor and who owns each confirmation

How we support

  • Support is available as a retainer for version upgrades, client changes and new LDAP or RADIUS applications
  • Re-test affected legacy clients after each authentik upgrade, since bind and RADIUS behavior can change between releases
  • Review failed-login alerts and lockout patterns with your team during the retainer period
  • Ask for a written quote that lists scope, deliverables, testing and any retainer terms before work begins

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.