best practice für die Speicherung von oauth UND lokalen Authentifizierungs-Methoden?
Wenn ich ein Dienst ausgeführt, die Benutzer zu authentifizieren, die über den "lokalen" Benutzernamen/Passwort-Kombinationen und AUCH eine beliebige Anzahl von OAuth-Dienste - wie könnte das user-Daten-Modell Aussehen?
In der Regel, wenn ich den Umgang mit allen logins selbst, in der "user" - Datenbank (angenommen MySQL), die Felder Benutzername und Kennwort erforderlich sein würde, die als nicht-null. Aber, wenn meine Benutzer wollte nur log-in mit Facebook, würde ich nur store die Facebook auto-token, und nicht irgendeinen username/Passwort lokal.
Weiter, was ist, wenn Sie wollen, sich mit Twitter creds, und dann tumblr und was auch immer für ein service-of-the-day? Ich könnte ein Feld für jeden Typ, aber das könnte ein wenig unhandlich. Wäre ich besser dran, halten andere Tabelle "Authentifizierungsmethoden" aus Mangel an einem besseren Begriff, so konnte ich eine eins-zu-viele-Beziehung zwischen Benutzer und wie diese authentifizieren?
Im Grunde bin ich gefragt, ob jemand weiß, der ein Industrie-standard-best-practice für dieses Szenario, oder kann mir in die richtige Richtung (oder wenn jemand umgesetzt hat, so etwas wie dieses, die gut funktioniert für Sie). Ein Benutzer, der mehrere Methoden der Authentifizierung - was ist der beste Weg zu halten, dass die info?
Wenn eine der Annahmen, die ich gemacht habe sind ungültig, bitte ich zu entschuldigen, bitte korrigieren Sie mich.
- Ich persönlich würde nicht wollen, um sich mit mehr als ein oder zwei authentifizierungsarten - versuchen zu akzeptieren und alles ist nur ein Alptraum. Wenn Ihre app bezieht sich stärker auf FB, dann ermöglichen, FB, etc. That being said... reden nur OAuth + local, würde ich denken, würden Sie implementieren Sie eine Methode, die auf Ihrem Nutzer-Klasse, so etwas wie oauthenticated? (Ich bin ruby Kerl ist), würde Ihnen sagen, ob Sie wurden zunächst lokalen-authed oder o-authed. Dann in der Authentifizierungs-code, den Sie brauchen, um zu überprüfen, und Niederlassung auf, welche Methode Sie verwendet, um Sie eingeloggt. Nach, dass, sollte es keine Rolle.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe keine Ahnung, ob meine Lösung kommt nah an jede Art von Industrie-standard, aber ich habe dies in mehreren apps vor.
Identität innerhalb Ihrer Anwendung sollte ein Auszug aus der Authentifizierungsquelle.
Was ich am Ende der Einrichtung wird, so etwas wie dieses:
[ Weitere Normalisierung, machen Dienst seine eigene Tabelle mit den service-meta-Felder. ]
Dann Ihren auth-script nicht so etwas wie dieses:
In Fällen von einigen services müssen Sie entweder auf autogenerate einige der user-Feld-Werte, oder fordern Sie den Benutzer zur Eingabe während der ersten Authentifizierung, je nachdem, welche Art von Daten verfügbar ist, um Sie aus dem Dienst.
Ich denke, was Sie wollen, ist eine lokale Authentifizierung-system (ggf. auch für legacy-Gründen?) sowie der Unterstützung der Benutzer bei der Anmeldung die Delegierte Authentifizierung. Der standard für die Delegierten auth ist OpenID. Vielleicht möchten Sie sich bei OpenID-consumer-Bibliotheken und samples, das sollte Ihnen eine Vorstellung zu speichern OpenID-Anmeldeinformationen. Leider sind Facebook und Twitter nicht unterstützen OpenID, aber die Strömung ist so ziemlich dieselbe, d.h. Ihre Daten-Modell wird sich nicht ändern. Wir haben umgesetzt, ein OpenID consumer zu unterstützen OpenID-basierten login und Registrierung. Zur Unterstützung der lokalen Authentifizierung, wir haben ein OpenID-provider. In anderen Worten, wir sind beide einem Verbraucher und einem Anbieter. So wird sogar die lokale auth-system-standards basiert. Nun zu Ihrer Frage-schema - Wir haben die Quelle (lokale, twitter, facebook, google, yahoo, AOL) und die E-Mail als einen zusammengesetzten Schlüssel, zusammen mit dem token und/oder Passwort bei der Authentifizierung Tabelle. Wir lassen Sie Benutzern das ändern Ihrer Anzeigenamen, und haben eine einzigartige vanity-URL, die auch ein Teil dieses Schemas. Nutzer haben die option, ein Passwort zu setzen, wenn Sie kommen durch OpenID, als auch für Mobile Sie brauchen ein Passwort (nicht eine ganze Menge von OpenID-Unterstützung auf mobile). OAuth löst ein wenig anders Anwendungsfall, in dem man sich mit Genehmigung mehr als die Authentifizierung. Funktioniert diese Hilfe? Wenn Sie Fragen haben, fühlen Sie sich frei zu kommentieren und zu wäre ich froh um mehr details zu bieten - ich will einfach nicht, Sie zu verwirren mit zu viel Informationen an dieser Stelle.