diff --git a/docs/howto/auth/nativeauth.rst b/docs/howto/auth/nativeauth.rst
new file mode 100644
index 0000000..7403a6f
--- /dev/null
+++ b/docs/howto/auth/nativeauth.rst
@@ -0,0 +1,38 @@
+.. _howto/auth/nativeauth:
+
+==============================================
+Let users sign up with a username and password
+==============================================
+
+The **Native Authenticator** lets users signup for creating a new username
+and password.
+When they signup, they won't be able to login until they are authorized by an
+admin. Users that are characterized as admin have to signup as well, but they
+will be authorized automatically.
+
+
+Enabling the authenticator
+==========================
+
+#. Enable the authenticator and reload config to apply the configuration:
+
+ sudo tljh-config set auth.type nativeauthenticator.NativeAuthenticator
+ sudo tljh-config reload
+
+
+Allowing all users to be authorized after signup
+================================================
+
+By default, all users created on signup don't have authorization to login.
+If you wish to allow **any** user to access
+the JupyterHub just after the signup, run the following command:
+
+.. code-block:: bash
+
+ tljh-config set auth.NativeAuthenticator.open_signup true
+ tljh-config reload
+
+Optional features
+=================
+
+More optional features are available on the `authenticator documentation `
diff --git a/docs/index.rst b/docs/index.rst
index ea6e6b9..0dd4fdc 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -76,6 +76,7 @@ with your JupyterHub. For more information on Authentication, see
howto/auth/dummy
howto/auth/github
howto/auth/firstuse
+ howto/auth/nativeauth
Administration and security
---------------------------
@@ -147,4 +148,4 @@ to people contributing in various ways.
contributing/dev-setup
contributing/tests
contributing/plugins
- contributing/packages
\ No newline at end of file
+ contributing/packages
diff --git a/docs/topic/authenticator-configuration.rst b/docs/topic/authenticator-configuration.rst
index 32721c6..5e40a9a 100644
--- a/docs/topic/authenticator-configuration.rst
+++ b/docs/topic/authenticator-configuration.rst
@@ -16,6 +16,7 @@ can be used with TLJH. A number of them ship by default with TLJH:
available.
#. `FirstUseAuthenticator `_ - Users set
their password when they log in for the first time. Default authenticator used in TLJH.
+#. `NativeAuthenticator `_ - Allow users to signup, add password security verification and block users after failed attempts oflogin.
We try to have specific how-to guides & tutorials for common authenticators. Since we can not cover
everything, this guide shows you how to use any authenticator you want with JupyterHub by following
diff --git a/tests/test_configurer.py b/tests/test_configurer.py
index f58e40f..98dd106 100644
--- a/tests/test_configurer.py
+++ b/tests/test_configurer.py
@@ -198,3 +198,20 @@ def test_load_secrets(tljh_dir):
assert tljh_config['traefik_api']['password'] == "traefik-password"
c = apply_mock_config(tljh_config)
assert c.TraefikTomlProxy.traefik_api_password == "traefik-password"
+
+
+def test_auth_native():
+ """
+ Test setting Native Authenticator
+ """
+ c = apply_mock_config({
+ 'auth': {
+ 'type': 'nativeauthenticator.NativeAuthenticator',
+ 'NativeAuthenticator': {
+ 'open_signup': True,
+ }
+ }
+ })
+ assert c.JupyterHub.authenticator_class == 'nativeauthenticator.NativeAuthenticator'
+ assert c.NativeAuthenticator.open_signup == True
+
diff --git a/tljh/installer.py b/tljh/installer.py
index 56f5ae5..3c8f222 100644
--- a/tljh/installer.py
+++ b/tljh/installer.py
@@ -193,6 +193,7 @@ def ensure_jupyterhub_package(prefix):
'jupyterhub-dummyauthenticator==0.3.1',
'jupyterhub-systemdspawner==0.11',
'jupyterhub-firstuseauthenticator==0.12',
+ 'jupyterhub-nativeauthenticator==0.0.4',
'jupyterhub-ldapauthenticator==1.2.2',
'oauthenticator==0.8.0',
])