Ich habe das mit sled.com durchgemacht. Hier gibt es mehrere Probleme beim Erstellen von Konten und beim Unterstützen mehrerer Konten von Drittanbietern für die Anmeldung. Einige von ihnen sind:
- Müssen Sie sowohl ein lokales Passwort als auch Anmeldungen von Drittanbietern unterstützen?
Für sled.com habe ich beschlossen, das lokale Passwort aufgrund des geringen Mehrwerts und der zusätzlichen Kosten für die Sicherung eines Passworteingabeformulars zu löschen. Es gibt viele bekannte Angriffe zum Brechen von Passwörtern. Wenn Sie Passwörter einführen möchten, müssen Sie sicherstellen, dass diese nicht leicht zu knacken sind. Sie müssen sie auch in einem One-Way-Hash oder ähnlichem speichern, um zu verhindern, dass sie auslaufen.
- Wie viel Flexibilität möchten Sie bei der Unterstützung mehrerer Konten von Drittanbietern einräumen?
Anscheinend haben Sie bereits die drei Anmeldeanbieter ausgewählt: Facebook, Twitter und LinkedIn. Das ist großartig, weil Sie OAuth verwenden und mit einer genau definierten Gruppe vertrauenswürdiger Anbieter zusammenarbeiten. Ich bin kein Fan von OpenID. Die verbleibende Frage ist, ob Sie mehrere Drittanbieter-Konten desselben Anbieters unterstützen müssen (z. B. ein lokales Konto mit zwei verknüpften Twitter-Konten). Ich gehe davon aus, dass dies nicht der Fall ist, aber wenn Sie dies tun, müssen Sie dies in Ihrem Datenmodell berücksichtigen.
Für Sled unterstützen wir die Anmeldung mit Facebook, Twitter und Yahoo! und in jedem Benutzerkonto einen Schlüssel für jeden speichern: {"_id": "djdjd99dj", "yahoo": "dj39djdj", twitter: "3723828732", "facebook": "12837287"}. Wir richten eine Reihe von Einschränkungen ein, um sicherzustellen, dass jedes Konto eines Drittanbieters nur mit einem einzelnen lokalen Konto verknüpft werden kann.
Wenn Sie mehrere Konten von demselben Drittanbieter zulassen möchten, müssen Sie Listen oder andere Strukturen verwenden, um dies zu unterstützen, und damit alle anderen Einschränkungen, um die Eindeutigkeit sicherzustellen.
- Wie verbinde ich mehrere Konten?
Wenn sich der Benutzer zum ersten Mal für Ihren Dienst anmeldet, geht er zuerst zum Drittanbieter und gibt eine verifizierte Drittanbieter-ID zurück. Anschließend erstellen Sie ein lokales Konto für sie und sammeln alle anderen gewünschten Informationen. Wir erfassen ihre E-Mail-Adresse und bitten sie, einen lokalen Benutzernamen auszuwählen (wir versuchen, das Formular mit dem vorhandenen Benutzernamen des anderen Anbieters vorab auszufüllen). Eine spätere lokale Kennung (E-Mail, Benutzername) ist für die spätere Wiederherstellung des Kontos sehr wichtig.
Der Server weiß, dass dies eine erstmalige Anmeldung ist, wenn der Browser kein Sitzungscookie (gültig oder abgelaufen) für ein vorhandenes Konto hat und das verwendete Drittanbieter-Konto nicht gefunden wird. Wir versuchen, den Benutzer darüber zu informieren, dass er sich nicht nur anmeldet, sondern ein neues Konto erstellt, sodass er hoffentlich pausiert und sich stattdessen mit seinem vorhandenen Konto anmeldet, wenn er bereits ein Konto hat.
Wir verwenden genau denselben Ablauf, um zusätzliche Konten zu verknüpfen. Wenn der Benutzer jedoch von einem Drittanbieter zurückkommt, wird das Vorhandensein eines gültigen Sitzungscookies verwendet, um zwischen dem Versuch, ein neues Konto mit einer Anmeldeaktion zu verknüpfen, zu unterscheiden. Wir erlauben nur ein Drittanbieter-Konto für jeden Typ. Wenn bereits ein Konto verknüpft ist, blockieren Sie die Aktion. Dies sollte kein Problem sein, da die Schnittstelle zum Verknüpfen eines neuen Kontos deaktiviert ist, wenn Sie bereits eines haben (pro Anbieter), aber nur für den Fall.
- Wie füge ich Konten zusammen?
Wenn ein Benutzer versucht hat, ein neues Drittanbieter-Konto zu verknüpfen, das bereits mit einem lokalen Konto verknüpft ist, fordern Sie ihn einfach auf, zu bestätigen, dass er die beiden Konten zusammenführen möchte (vorausgesetzt, Sie können eine solche Zusammenführung mit Ihrem Datensatz durchführen - oft einfacher gesagt als getan). Sie können ihnen auch eine spezielle Schaltfläche zum Anfordern einer Zusammenführung bereitstellen. In der Praxis müssen sie jedoch nur ein anderes Konto verknüpfen.
Dies ist eine ziemlich einfache Zustandsmaschine. Der Benutzer kommt mit einer Konto-ID eines Drittanbieters vom Drittanbieter zurück. Ihre Datenbank kann sich in einem von drei Zuständen befinden:
- Das Konto ist mit einem lokalen Konto verknüpft und es ist kein Sitzungscookie vorhanden -> Anmelden
- Das Konto ist mit einem lokalen Konto verknüpft und ein Sitzungscookie ist vorhanden -> Zusammenführen
- Das Konto ist nicht mit einem lokalen Konto verknüpft und es ist kein Sitzungscookie vorhanden -> Anmelden
Das Konto ist nicht mit einem lokalen Konto verknüpft und es ist ein Sitzungscookie vorhanden -> Zusätzliches Konto verknüpfen
- Wie führe ich eine Kontowiederherstellung bei Drittanbietern durch?
Dies ist immer noch experimentelles Gebiet. Ich habe kein perfektes UX dafür gesehen, da die meisten Dienste neben den Konten von Drittanbietern sowohl ein lokales Kennwort bereitstellen als auch sich auf den Anwendungsfall "Passwort vergessen" konzentrieren und nicht auf alles andere, was schief gehen kann.
Bei Sled haben wir uns für "Benötigen Sie Hilfe beim Anmelden?" Wenn Sie auf klicken, fragen Sie den Benutzer nach seiner E-Mail-Adresse oder seinem Benutzernamen. Wir suchen nach und wenn wir ein passendes Konto finden, senden Sie diesem Benutzer eine E-Mail mit einem Link, über den er sich automatisch beim Dienst anmelden kann (einmalig gültig). Sobald sie eingegangen sind, führen wir sie direkt zur Seite zum Verknüpfen von Konten, teilen ihnen mit, dass sie einen Blick darauf werfen und möglicherweise zusätzliche Konten verknüpfen sollen, und zeigen ihnen die Konten von Drittanbietern, die sie bereits verknüpft haben.