# Dienst mit Basic Auth absichern

Traefik bietet ein Modul für Basic Auth an, um einzelne Dienste mit einem Zugangsschutz zu versehen.

Angenommen der Whoami Dienst, welcher unter [Dienst konfigurieren](https://jaeckel.one/attachments/34) erklärt wird, soll mit einem solchen Zugangsschutz versehen werden. Dann würde die Docker Compose Datei wie folgt erweitert werden.

```yaml
services:
  whoami:
    image: "traefik/whoami"
    container_name: "simple-service"
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.whoami.rule=Host(`whoami.localhost`)"
      - "traefik.http.services.whoami.loadbalancer.server.port=80"
      - "traefik.http.middlewares.whoami-auth.basicauth.users=benutzername:$2a$12$74NsF8MzGC25qO5tYoGfnO1Tg9I9c5Fcbu/zwi1/paDfdYD8eeUxy"
      - "traefik.http.routers.whoami.middlewares=whoami-auth"
    networks:
      - traefik
 
networks:
  traefik:
    name: traefik
    external: true
```

Die 1. neue Zeile gibt an, wie die Logindaten für den Benutzer bzw. die Benutzer sind. Außerdem wird ein Name für das Modul vergeben, in diesem Fall *whoami-auth*. Dann wird ein Benutzername (hier: benutzername) vergeben und nach dem Doppelpunkt wird das Passwort als Hash angegeben. Am besten wird der bcrypt Hash verwendet, welcher z. B. auf der folgenden Webseite generiert werden kann: [Bcrypt-Generator](https://jaeckel.one/attachments/33)

```yaml
      - "traefik.http.middlewares.whoami-auth.basicauth.users=benutzername:$2a$12$74NsF8MzGC25qO5tYoGfnO1Tg9I9c5Fcbu/zwi1/paDfdYD8eeUxy"
```

Mit der 2. neuen Zeile wird das Modul auf den *whoami*-Dienst angewendet.

```yaml
      - "traefik.http.routers.whoami.middlewares=whoami-auth"
```

Anschließend mit docker compose up -d nochmal die Container neu erstellen lassen und fertig. Ab jetzt ploppt ein Anmeldefenster auf, wenn auf die Seite zugegriffen wird.

[![grafik.png](https://jaeckel.one/uploads/images/gallery/2024-03/scaled-1680-/79Pgrafik.png)](https://jaeckel.one/uploads/images/gallery/2024-03/79Pgrafik.png)

Nur wenn die richtigen Logindaten eingegeben werden, wird die Seite angezeigt, ansonsten erscheint eine Fehlerseite mit dem Fehlercode *401 Unauthorized*.