DEV Community

Łukasz Wolnik
Łukasz Wolnik

Posted on • Updated on

Basic HTTP authentication in Traefik 2

In order to secure your website with Basic HTTP authentication in Traefik do the following.

1. Download apache2-utils

sudo apt install apache2-utils
Enter fullscreen mode Exit fullscreen mode

2. Generate password and copy its output

htpasswd -nB adam
Enter fullscreen mode Exit fullscreen mode

The n option will display the hash in stdout and the B option will use more secure encryption.

devto password's hash is shown below:

adam:$2y$05$h9OxLeY20/5uiXjfPgdRxuFlrfqBf2QifYDgrwsR6rAEgX3/dpOGq
Enter fullscreen mode Exit fullscreen mode

3. Replace $ with $$

adam:$$2y$$05$$h9OxLeY20/5uiXjfPgdRxuFlrfqBf2QifYDgrwsR6rAEgX3/dpOGq
Enter fullscreen mode Exit fullscreen mode

4. Create a new middleware in Traefik for HTTP basic auth for your HTTPS entrypoint.

  labels:
    - "traefik.http.middlewares.yourservice-basicauth.basicauth.users=adam:$$2y$$05$$h9OxLeY20/5uiXjfPgdRxuFlrfqBf2QifYDgrwsR6rAEgX3/dpOGq"
Enter fullscreen mode Exit fullscreen mode

Remember to use the escaped double $.

5. Create a new chain for your HTTPS connection.

You may have existing rules for your HTTPS route, e.g. compressing, etc.

So create a new chain where you'll combine your existing middlewars and the newly created yoursite-basicauth.

In your docker-compose.yml file:

  labels:
    - "traefik.http.middlewares.yourservice-https-chain.chain.middlewares=yourservice-basicauth,yourservice-other-middleware-remove-or-replace-with-yours"
    - "traefik.http.routers.yourservice-https.middlewares=yourservice-https-chain"
Enter fullscreen mode Exit fullscreen mode

Basic HTTP auth in Traefik

Restart your service and your website will now prompt browsers for username and password.

Discussion (1)

Collapse
woto profile image
Ruslan Kornev

Thanks. Works like a charm.