Dieser Beitrag ist eine deutsche Übersetzung von Great Invitations (CC BY-SA 4.0). Mit wir o.ä. ist dementsprechend das Prosody-Team gemeint, welches diesen Artikel ursprünglich verfasst hat.
Es gibt derzeit zwei Arten von Servern im XMPP-Netzwerk: solche mit öffentlicher Registrierung und solche ohne.
Die Server, die eine Registrierung unterstützen, erlauben es in der Regel, Konten über das Web oder mit einem XMPP-Client (XEP-0077) zu erstellen. Das Problem ist, dass dies den Server für die ganze Welt öffnet.
Selbst wenn CAPTCHAs und andere Schutzmechanismen genutzt werden, wird selbst der sorgfältigste Administrator eines öffentlichen XMPP-Servers irgendwann feststellen, dass Spammer Konten auf seinem Server registrieren.
Die Alternative ist, die Registrierung zu deaktivieren und alle Konten manuell einzurichten. Dies funktioniert für einen privaten Server, bedeutet aber zusätzlichen Aufwand und zusätzliche Verantwortung des Administrators. In vielen Fällen bedeutet es auch, dass der Admin dafür verantwortlich ist, das Passwort des Benutzers zu generieren und einen Weg zu finden, es irgendwie sicher an den Benutzer zu senden.
Aber halt! Es gibt einen dritten Weg! Das Konzept von Internetdiensten, die nur für eingeladene Benutzer zugänglich sind, gibt es schon seit langer Zeit. Als Google Gmail auf den Markt brachte, war es bekanntlich nur möglich, sich per Einladung anzumelden. Heute hat Gmail über 1,5 Milliarden Nutzer! Vielleicht sind die Ambitionen als Prosody-Administrator nicht so hoch, aber es gibt einige eindeutige Vorteile für einen einladungsbasierten Registrierungsablauf:
- Server-Administratoren können Einladungen erstellen und müssen niemals das Passwort eines anderen Benutzers generieren oder sehen.
- Einladungs-Links nutzen natürlich den Server, von dem sie stammen, so dass der Benutzer nicht manuell einen Server in seinem Client auswählen muss (eine überraschend häufige Schwierigkeit für Leute, die mit dem Konzept von föderierten Messaging-Netzwerken nicht vertraut sind).
- Benutzer-zu-Benutzer-Einladungen können vom Administrator aktiviert werden, was ein natürlicheres und vertrauensvolleres Wachstum ermöglicht als eine offene Registrierung.
- Eingeladene Benutzer können die Person, die sie eingeladen hat, direkt in ihrer Kontaktliste finden, was eine weitere Hürde beseitigt, mit der sich Erstbenutzer normalerweise auseinandersetzen müssen.
- Missbräuchliche Accounts (z.B. solche, die Spam versenden) können zu einem einladenden Benutzer zurückverfolgt werden, und dieser Benutzer kann daran gehindert werden, weitere Einladungen zu erstellen.
Die Erfahrung mit dem einladungsbasierten Registrierungsablauf, den wir für Snikket entwickelt haben, hat gezeigt, dass Einladungs-Links ein wirklich einfacher Weg sind, um Leute auf einem Server anzumelden, ohne offene Registrierung aktivieren zu müssen. Daher haben wir uns entschlossen, dies auf das weitere XMPP-Ökosystem zu übertragen.
Unser Ziel war es, die Einfachheit des Snikket-Registrierungsablaufs so weit wie möglich beizubehalten und gleichzeitig zu ermöglichen, mit anderen Clients auf so vielen Plattformen wie möglich zu arbeiten. Dies ist nicht so einfach, wie man vielleicht denkt!
Wie es funktioniert
Wir haben die Clients in drei Kategorien eingeteilt, basierend darauf, was sie unterstützen:
- “Magischer” Installationslink - im Moment wird dies nur von einigen Apps im Google Play Store (Conversations und yaxim) unterstützt. Eine Anfrage wurde bei F-Droid eingereicht, um zu sehen, ob wir diese praktische Funktion auch auf FOSS-App-Stores ausweiten können.
xmpp:
URIs mit Einladungs-Tokens (derzeit von Conversations, yaxim und Siskin unterstützt).- Manuelle Einrichtung von Konten
Die Funktion “magischer Link” bietet den nahtlosesten Ablauf. Der Benutzer folgt dem Link, um die App zu installieren, und das Invite-Token wird nach der Installation auf magische Weise von der App erkannt. Das heißt, der Ablauf ist kurz und reibungslos:
Wenn dieser Ablauf nicht unterstützt wird, ist die nächste bevorzugte Option, dass der Benutzer den Einladungs-URI mit der von ihm gewählten App öffnet. Die Schwierigkeit dabei ist, dass der Client zuerst installiert werden muss, da der Browser sonst nicht weiß, wie er den URI behandeln soll. Das bedeutet, dass der Benutzer zum Herunterladen und Installieren des Clients umgeleitet wird und dann zurück auf die Einladungsseite gehen muss:
Wenn der Client keine Einladungs-URIs unterstützt, wird der Benutzer durch die Online-Registrierung seines Kontos geführt (Prosody validiert das Invite-Token) und muss dann nur noch seine Anmeldedaten in den Client eingeben, nachdem er ihn installiert hat:
Mit diesen drei Abläufen können wir einen Einladungslink in einen angemeldeten Benutzer überführen, egal für welche Plattform- und Client-Kombination sich der Benutzer entscheidet.
Daten über Clients werden in mod_register_apps gesammelt und können auch von Server-Administratoren konfiguriert werden (die vielleicht eine bestimmte Gruppe von Apps empfehlen wollen, die sie für die Verwendung auf ihrem Server unterstützen wollen).
Wie man es einrichtet
Alle Module befinden sich in unserem Community-Repository1 und sollten mit Prosody 0.11 und trunk funktionieren.
Einfach einen Blick auf das Beispiel-Konfigurations-Snippet in mod_invites werfen, um loszulegen! Wenn man fertig ist, fügt man vielleicht noch mod_invites_api hinzu, um sich eine URL mit Lesezeichen zu erstellen, die auf Knopfdruck eine Einladung für ein neues Konto generieren kann.
Vieles davon ist sehr neu, daher freuen wir uns über Feedback. :)
Und nicht vergessen: Wer einen einfachen Prosody-Server für eine kleine Gruppe einrichten und Funktionen wie diese und mehr fertig konfiguriert haben möchte, sollte einen Blick auf Snikket werfen.
Die Zukunft
Es gibt viele Möglichkeiten, auf diesem System aufzubauen. Wir hoffen, dass mehr Clients Token-URIs implementieren, und vielleicht finden ein paar schlaue Leute sogar heraus, wie man den “magischen Link”-Ablauf auf weitere Plattformen ausweiten kann. Wir denken auch, dass die Einladungs-API, die es vertrauenswürdigen Dritten erlaubt, Einladungen für einen Server zu generieren, einige sehr interessante Einsatzmöglichkeiten bietet.
In der Zwischenzeit freuen wir uns auf Feedback und Beiträge und darauf, von den Erfolgsgeschichten beim Onboarding zu hören :)