Skip to main content
  1. Posts/
  2. Authentik/

Setting up user enrollment and invitation processes in Authentik

··1610 words·8 mins· loading · loading · ·
Stilicho2011
Author
Stilicho2011
Writing about homelab, self-hosting, automation and open-source solutions
Table of Contents
Authentik - This article is part of a series.
Part : This Article
Note

If you found this article useful and would like to thank the author, you can do so via the corresponding link on boosty

As an administrator in Authentik, you can manually create and delete users, generate complex passwords for them, and set up their login rules using TOTP codes or WebAuthn devices. This is certainly a workable mechanism, but what if there are a lot of such users? Or even if we’re talking about some home use scenario, you simply want to automate the process so that you only deal with the management side of things. In this article, we’ll talk about how to set up such automation for user registration and invitations in Authentik.

Tip

For this setup, and generally for Authentik to work correctly going forward, you should have already configured your mail server details in the .env environment variables file, from which notifications will be sent to both you and your users. You can verify the mail server is configured correctly with the simple command docker exec authentik_worker ak test_email your_email@domain.com

Note

The application settings described in this article are accurate as of the time of writing.

Note

The video guide linked below is accurate as of when it was created, but the configuration logic hasn’t changed.

Note

Starting with release 2026.5, Authentik has a dedicated Invitation Wizard right in the admin panel, which can speed up sending invitations without manually assembling flows/stages. The manual method below still works and gives you more control over the details - and it’s the one I show in this article.

Creating a group for regular users
#

In the Authentik interface, go to Directory > Groups > New Group

In the window that appears, give our group a name. Since these will be regular users, we don’t toggle the Superuser Privileges switch.

Creating the authentik Users group without Superuser Privileges

Click Create

Answering an unasked question - “why did I name the group so oddly, with the first word lowercase and the second capitalized?” - I’ll explain that the default group for admins is spelled exactly that way, authentik Admins. I’m just keeping the style consistent.

Creating stages and flows
#

Email Stage
#

Go to Flows and Stages > Stages > Create

In the menu that appears, select Email Stage

Selecting the stage type - Email Stage

Click Next and in the next window set the necessary parameters: give the stage a name, an email subject, and the template that will be used. Click Finish

Configuring the Email Stage - name, email subject, template

Creating the invitation flow
#

Go to Flows > Create

Fill in and set the necessary parameters roughly as shown in the screenshot below. I enabled compatibility mode for better compatibility with password managers. In the Authentication field, I didn’t set any mandatory parameters. I did this intentionally - later on I’ll set a hard requirement for all users, without exception, to set up two-factor authentication.

Creating the Enrollment Flow with compatibility mode enabled

Now go to the Enrollment flow we created > Stage Bindings > Bind existing stage (as you probably guessed, you can also create stages from this menu by clicking Create and Bind Stage, but I think my approach is more illustrative).

In the menu that appears, fill it in following my screenshot. Select the existing stage default-source-enrollment-prompt, and set the processing order for this stage.

Note

Note that I have the evaluate when flow is planned toggle enabled. If you’re familiar with the topic, you can choose a different option.

Binding the default-source-enrollment-prompt stage to the Enrollment Flow

Now we need to make changes to the newly created stage. Click Edit Stage and select the data fields we need, which new users will need to fill in when registering.

We select the following values: name, email, password, repeat password. The username value is already selected by default. In the Validation Policy section, select the password complexity policy we created (you can read how to set password complexity values in the article on password recovery). Click Update

Configuring registration fields and the Validation Policy in default-source-enrollment-prompt

Now let’s create a new stage binding for the flow: click Bind existing stage > default-source-enrollment-write, set the processing order, click Create.

Binding the default-source-enrollment-write stage to the Enrollment Flow

As before, let’s make changes to the created stage > Edit Stage

Enable the Create users as inactive option. This is needed so that after new users enter their data and register in the system, their account remains inactive until they confirm the action via email. For Group, select the authentik Users group we created. Be sure to select internal in the User type section.

Configuring default-source-enrollment-write - Create users as inactive, group, and User type

Click Bind existing stage once more, select email-account-confirmation, which we created earlier, set the processing order, click Create.

Binding the email-account-confirmation stage to the Enrollment Flow

You can check the settings for this stage. Actually there isn’t much to edit here, we just make sure that the Activate pending users on success feature is enabled. If you haven’t configured mail via environment variables, deactivate the global settings toggle. New fields will appear that you’ll need to fill in with the corresponding values from your email provider.

Configuring the email-account-confirmation stage - Activate pending users on success

Configuring default-authentication-flow
#

Go to Flows, select our authentication flow, in my case default-authentication-flow, go into the Stage Bindings menu, and make changes to the default-authentication-identification stage. Scroll all the way down, and in the Flow Settings menu under Enrollment Flow, select the newly created flow and click Update.

Binding the Enrollment Flow to the default-authentication-identification stage

Log out of our account and check the login menu (of course, all this should be done in incognito mode, and at minimum you need to clear your browser cookies).

We see that a new registration menu for new users has appeared.

Authentik login screen with the new registration link

You can test the menu’s functionality: have a new (test) user (you, in this case) register, receive a confirmation email, click the link in the email, and the rest is intuitive. If you did everything right, and the article’s author didn’t mess anything up (as sometimes happens), you now have a new user who created their own account, with a password matching the parameters and policies you set, and they’re now in the regular users group.

Setting up user invitations in Authentik
#

We’ve now enabled new users to register on our Authentik instance themselves. But that’s too much freedom, letting any random passerby simply visit the Authentik site and register. We don’t want that, right? We want only select users to be able to register, and only by invitation. Or we could do a mass invitation mailing, but in any case, only the person we sent an invitation to will be able to register. Let’s set that up now.

User Write Stage
#

Go to Stages, create a new User Write Stage stage (due to a translation bug in application version 2025.10.3, which isn’t fully disabled, this stage is called “Этап записи пользователя” in my instance).

Creating the User Write Stage

Click Next. Set the necessary parameters: the stage name and its settings, plus which group new users will be placed into. Since we’re assuming we know who is registering, we can deactivate the Create users as inactive toggle.

Configuring the User Write Stage for invited users

Invitation Stage
#

Let’s create another new stage, this time Invitation Stage (in my instance it’s called “Этап приглашения”).

Creating the Invitation Stage

Click Next, give the stage a name. If the Continue flow without invitation toggle is enabled, disable it.

Configuring the Invitation Stage - disabling Continue flow without invitation

Next, go to Flows > Create and set the necessary parameters. As before, I enable compatibility mode for password managers.

Creating the enrollment invitation flow with compatibility mode

Now go to the enrollment invitation flow we just created, and click Bind existing stage.

Here we select the stage we created, set its processing order, and choose Evaluate when flow is planned instead of Evaluate when stage is run.

Binding the Invitation Stage to the enrollment invitation flow

Click Bind existing stage again and select default-source-enrollment-prompt, set its processing order, and choose Evaluate when flow is planned instead of Evaluate when stage is run.

Binding the default-source-enrollment-prompt stage to the enrollment invitation flow

Now edit the default-source-enrollment-prompt stage and check that everything matches the screenshot. Basically, everything here is similar to the settings described at the beginning of this article.

Configuring the default-source-enrollment-prompt stage for the invitation flow

Click Bind existing stage again and select enrollment-invitation-write, set its processing order, and choose Evaluate when flow is planned instead of Evaluate when stage is run.

Binding the enrollment-invitation-write stage to the enrollment invitation flow

One last time, click Bind existing stage and select default-source-enrollment-login, set its processing order, and choose Evaluate when flow is planned instead of Evaluate when stage is run.

Binding the default-source-enrollment-login stage to the enrollment invitation flow

Creating invitations
#

Now go to Directory > Invitations > Create

In the window that appears, give the invitation a name, specify how long it will be valid (you can effectively make it permanent), and decide whether it’s single use or reusable multiple times.

Creating an invitation - expiration and single use

Click Create.

Now, to get the invitation link, just click the corresponding item in the dropdown menu, and we get our invitation link, which we can send to our users.

Getting the invitation link in the Invitations section

Now anyone who receives such an invitation link, upon following it, will land on the new user registration menu, just like in the previous section.

Shutting the door on self-registration
#

Freedom is good, but in moderation. Let’s say we’ve registered everyone we need and aren’t expecting anyone else. Now we’ll strictly forbid new users from registering without our explicit control.

Go to Stages > Create and create a new Deny Stage.

Creating the Deny Stage

Click Next, give our stage a name, and write the message that an uninvited guest will see if the wild idea strikes them to try registering on our Authentik instance.

Configuring the denial message in the Deny Stage

Go to Flows > main-page-enrollment, go to Bind existing stage. Select our Deny Stage. For the order number, choose any value, but with the mandatory condition that this stage is processed first - in my case that’s 0 - and choose Evaluate when flow is planned instead of Evaluate when stage is run, then click Create.

Binding the Deny Stage as the first stage of main-page-enrollment

Now, in incognito mode, let’s try registering on our Authentik instance, and if we did everything right, the user (whom we weren’t expecting) will get a rather unpleasant message.

Registration denial message after the Deny Stage block

With that, this article, which is essentially just a bunch of fun screenshots, can come to a close.

Authentik - This article is part of a series.
Part : This Article

Related