Ich implementiere eine Proof-of-Concept-Site, die optional mit einem externen Provider verlinkt werden kann. Der externe Anbieter wird verwendet, um zusätzliche Benutzerdaten zu erhalten. Der Provider macht die Authentifizierung mit OAuth 1.0a bequem verfügbar.
Um die Daten zu erhalten, authentifiziert sich der Benutzer auf der Provider-Site und erteilt die Berechtigung. Einfach.
Die Site verwendet ServiceStack. Benutzer registrieren sich und loggen sich mit einem CredentialsAuthProvider
ein. Ich habe mir die Dokumentation zu ServiceStack angesehen, die SocialBoostrapApi-Demo untersucht und meine Services entsprechend modelliert;
Zuerst habe ich eine User
-Klasse hinzugefügt, die in meiner Datenbank serialisiert wird, um die zusätzlichen Daten zu speichern.
Dann habe ich eine CustomUserSession erstellt, um die Methode OnAuthenticated
zu überschreiben.
Meine OnAuthenticated
-Methode ist der in der SocialBoostrapApi-Demo sehr ähnlich. Es läuft durch session.ProviderOAuthAccess
und holt die notwendigen Informationen aus ihnen (sucht nach dem OAuthTokens des "ExternalProvider" Providers).
Das bedeutet natürlich, dass, wenn der Benutzer meiner App auf dem externen Provider die Berechtigung erteilt, ich im OAuth-Callback die accessstoken, secret, alles bekomme und in session.ProviderOAuthAccess
lege.
Dies funktioniert natürlich für die aktuelle Sitzung, aber wenn sich der Benutzer an- und abmeldet, muss er erneut autorisieren (ein neues Zugriffs-Token erhalten).
Ich brauche einen Weg, um die Daten zu speichern, die ich in eine DB eingegeben habe; Ich habe versucht, mich umzusehen, habe aber nichts gefunden (siehe auch meine Frage hier ).
Also habe ich Code hinzugefügt, um sie direkt in der DB zu speichern:
%Vor%Nun, wenn sich der Benutzer authentifiziert, scheint ServiceStack alle Token für diese UserAuthId zu bekommen und sie in die Session zu setzen. Gut!
Mache ich das richtig?
Kann ich die Klassen User
/ CustomUserSession
loswerden und die zusätzlichen Informationen, die ich brauche, einfach im Verzeichnis "Items" in UserOAuthProvider
/ OAuthTokens
speichern?
Das würde meinen Code einfacher machen.
Am Ende von OnAuthenticate
speichert SocialBootstrapApi
die benutzerdefinierte Benutzertabelle erneut:
Warum ist es notwendig? Ich nehme an, dass einige Informationen aus der Tabelle " UserOAuthProvider
" in der Benutzertabelle kopiert werden (bei der nächsten Anmeldung nach einer neuen Autorisierung zum Beispiel), aber warum? Die Sitzung scheint bereits mit den richtigen Daten initialisiert worden zu sein.
Tags und Links c# oauth authentication servicestack