Matrix-Account-Registrierungen mit Token absichern
Ich habe mich lange geärgert. Des öfteren wollten Freunde von mir ein Konto auf meinem Matrix-Server anlegen – aber ich hatte die Registrierung aus Sicherheitsgründen deaktiviert. Also musste ich die Accounts manuell anlegen.
Offene Registrierungen laden leider Spam und Bots ein, und das wollte ich meinen Räumen nicht antun.
Mit einer kleinen Ergänzung in meiner homeserver.yaml
habe ich Synapse jetzt aber um eine richtig praktische Funktion erweitert: sichere Registrierungen mit Token. Und das Beste: ich kann Tokens sogar direkt per Matrix-Nachricht abrufen.
Ich habe beim Dominik (👉 ztfr.de) zufällig gesehen, dass er die Registrierung mit Token schon eine Weile einsetzt. Daraufhin habe ich ihn gefragt und er hat mir die Grundkonfiguration gezeigt – vielen Dank an dieser Stelle! 🙂
Auf dieser Basis habe ich mich dann noch ein wenig weiter eingelesen und bin schließlich auf die Möglichkeit mit Maubot gestoßen, die das Ganze für mich noch komfortabler macht.
⚙️ Die Synapse-Konfiguration
Die Konfiguration in der homeserver.yaml
ist überschaubar:
# Registration enable_registration: true registration_requires_token: true registration_shared_secret: "zensiert" token: "ein-selbstgewaehlter-token" enable_registration_without_verification: false bcrypt_rounds: 12 registrations_require_3pid: - email
Hier die einzelnen Punkte erklärt:
- enable_registration: true → Schaltet die Registrierung frei.
- registration_requires_token: true → Neue Nutzer brauchen ein gültiges Token.
- registration_shared_secret → Wird für Skripte genutzt, um Accounts automatisiert zu erzeugen (nicht für normale Nutzer).
(Hinweis: Diese Variable wird bereits bei der Installation von Synapse vordefiniert. Prüfe also, ob sie bei dir bereits konfiguriert ist. Ein zweiter Eintrag ist nicht nötig.) - token → Ein selbstgewählter fester Token. Funktioniert, ist aber unsicher, wenn er bekannt wird.
(Wird nur benötigt, wenn der Token nicht per API (Maubot) erzeugt wird, siehe unten.) - enable_registration_without_verification: false → Setzt voraus, dass E-Mail-Verifizierung genutzt wird.
- bcrypt_rounds: 12 → Stärke des Passwort-Hashings, 12 ist ein guter Wert.
- registrations_require_3pid: – email → E-Mail-Adresse muss verifiziert werden. Achtung: nur nutzen, wenn der Mailversand vom Server funktioniert.
Wenn man den festen Token nutzt, ist die Einrichtung hier schon abgeschlossen. Danach reicht ein Neustart von Synapse.
Besser ist allerdings der Weg über die Synapse-API – damit können Tokens zeitlich begrenzt oder auf eine bestimmte Anzahl von Registrierungen beschränkt werden.
🤖 Token-Verwaltung per Maubot
Noch komfortabler wird es, wenn man Tokens direkt per Matrix-Bot verwalten kann. Ich habe das mit Maubot umgesetzt. Voraussetzung ist eine Maubot-Manager-Instanz. Wer dazu Infos braucht: die offizielle Doku gibt es hier → Maubot Setup. Falls Interesse besteht, kann ich dazu auch mal einen eigenen Beitrag schreiben – einfach einen Kommentar hinterlassen!
Das passende Plugin habe ich hier gefunden: maubot-token auf GitHub. Dort gibt es die .mbp
-Datei direkt in den Releases.

🔧 Plugin installieren und konfigurieren
Die Installation im Maubot-Manager geht schnell:
- Im Webinterface bei Plugins auf das Plus klicken und die
.mbp
-Datei hochladen.

- Unter Instances eine neue Instanz anlegen, eine ID vergeben, auf Enabled und Running stellen.
- Den gewünschten Bot-Account als Primary User auswählen.
- Plugin-Typ auswählen und speichern.
Anschließend öffnet sich die Konfiguration. Meine sieht so aus:

# Access Token of any Admin access_token: 'MDAxOGxvY2F...SECRETVALUE...' # Base Url for Synapse admin API admin_api: http://matrix-synapse-app:8008/_synapse/admin # Base command without the prefix (!). base_command: token # Default allowed uses per token default_uses_allowed: 1 # Default expire time per generated token 7days=604800s default_expiry_time: 604800 # Wer den Bot nutzen darf whitelist: - '@patrick:techniverse.net'
Erklärung der Konfig:
- access_token → Admin-Token deines Synapse-Servers (Achtung: sicher verwahren!).
- admin_api → URL zur Admin-API. Beispiel:
http://matrix-synapse-app:8008/_synapse/admin
. - base_command → Welches Kommando genutzt wird (
!token
). - default_uses_allowed → Wie viele Registrierungen ein Token standardmäßig erlaubt.
- default_expiry_time → Lebensdauer in Sekunden (604800 = 7 Tage).
- whitelist → Nur diese Benutzer dürfen den Bot steuern. Sehr wichtig!
Einen Access Token für den Bot erstellen:
Damit der Bot mit der Synapse-Admin-API sprechen kann, brauchst du ein gültiges Access Token eines Admin-Accounts.
Diesen kannst du ganz einfach mit curl
abfragen:
curl -XPOST \ -d '{"type":"m.login.password", "user":"servicebot", "password":"geheimespasswort"}' \ "https://matrix.techniverse.net/_matrix/client/r0/login"
Parameter erklärt:
- type: Gibt die Login-Methode an (
m.login.password
= Benutzername/Passwort). - user: Der lokale Benutzername (z. B.
servicebot
). Ohne@
und ohne Domain. - password: Das Passwort des Accounts.
- URL: Dein Matrix-Server, hier im Beispiel
https://matrix.techniverse.net
.
Die Antwort sieht in etwa so aus:
{"user_id":"@servicebot:techniverse.net","access_token":"MDAxOGxvY2F...SECRETVALUE...","home_server":"techniverse.net","device_id":"ZRRLKCIQIC","well_known":{"m.homeserver":{"base_url":"https://matrix.techniverse.net/"}}}#
Den Wert von access_token
kopierst du und trägst ihn in die Konfiguration des Plugins ein (access_token: 'MDAxOGxvY2F…SECRETVALUE…'
).
Damit ist dein Bot startklar und kann Tokens per Chatbefehl erzeugen. 🎉
💬 Nutzung im Matrix-Raum
Danach habe ich einen Raum erstellt und den Bot, den ich oben festgelegt habe, eingeladen.
Einfach den Befehl !token
eingeben und schon zeigt er die Hilfe an:
Usage: !token <subcommand> [...] list [token] - List all [or specific] Tokens generate [uses] [expiry] - Generate a Token delete <token> - Delete a Token

Befehle im Detail:
- list [token] → Zeigt alle Tokens an. Beispiel:
!token list
- generate [uses] [expiry] → Erzeugt ein Token. Beispiel:
!token generate
→ 1 Nutzung, 7 Tage gültig (Standardwerte).!token generate 5 3600
→ 5 Nutzungen, 1 Stunde gültig.
- delete <token> → Entfernt ein Token sofort. Beispiel:
!token delete ABC123
🧪 Registrierung testen
Zum Test habe ich mir selbst einen Account auf meiner Instanz erstellt.
Konto erstellen → Benutzername, E-Mail, Passwort eingeben → Mail bestätigen → und schließlich den Token eintragen.

Den Token habe ich zuvor im Bot-Raum mit !token generate
erzeugt. Nach der Eingabe im Browser war ich direkt eingeloggt – und mein Matrix-Client war einsatzbereit!

✅ Fazit
Mit dieser Kombination aus Synapse-Config und Maubot habe ich endlich eine Lösung, die sowohl sicher als auch bequem ist. Ich kann Registrierungen flexibel freigeben, Tokens mit wenigen Klicks erzeugen und meinen Freunden den Zugang zum Server einfach ermöglichen – ohne meine Instanz zu gefährden.
Das Ganze ist schnell eingerichtet und spart mir auf Dauer jede Menge Ärger.
👥 Techniverse Community
Lust auf Austausch rund um Matrix, Selfhosting und andere smarte IT-Lösungen?
In der Techniverse Community triffst du Gleichgesinnte, kannst Fragen stellen oder einfach nerdigen Talk genießen. 🚀
👉 Jetzt der Gruppe auf Matrix beitreten
~ Direkte Raumadresse: #community:techniverse.net
Wir freuen uns, wenn du dabei bist!