2017-05-13 2 views
1

Ich habe versucht, die Funktionsweise von OAuth 2.0 in meiner eigenen RESTful-App zu lernen, und ich kann keine gute Erklärung dafür finden, wie mein Javascript-Client den Prozess verarbeitet.Verstehen der Verantwortlichkeiten des Kunden in OAuth 2.0

An dieser Stelle habe ich den Client (ein Angular 2 SPA) fragen Sie den Benutzer nach ihrem Benutzernamen und Passwort (Laufendes Django Rest Framework zusammen mit Django Oauth Toolkit). Der Client erstellt einen AJAX-Post auf dem Server (speziell auf/o/token), und mithilfe des Ressourceneigentümerkennworts wird der Datenfluss authentifiziert und empfängt die Antwort mit dem Token.

Wenn ich nun davon ausgehe, dass ich bis zu diesem Punkt alles richtig mache, bin ich nicht sicher, wie ich das Token von diesem Punkt an richtig handhaben kann.

An dieser Stelle habe ich meine Angular App App das Token in einer Variablen speichern und den Autorisierungsheader (mit dem Token) an die Aufrufe an die API angehängt. Dies funktioniert so weit wie das Gewähren der korrekten Berechtigungen, aber es ist schwierig für mich zu verstehen, wie die Persistenz des Headers beibehalten wird (wenn der Benutzer also zu einer anderen Seite navigiert, ist das Token weiterhin aufrufbar). Anfangs habe ich es in einem Cookie gespeichert, aber ich habe Bedenken bezüglich der Sicherheit.

Also, zuerst verstehe ich das alles richtig? Welche Sicherheitsbedenken sollte ich hier berücksichtigen? Und natürlich, wie kann ich das Token auf dem Client speichern?

Antwort

0

Ja, Sie müssen Zugriffstoken als Benutzersitzungsdaten speichern, da sie persistent sein sollten. Wenn der Benutzer beispielsweise Ihre Site verlässt und dann wieder öffnet, erwartet er sich selbst angemeldet zu sehen.

Es ist besser, wenn Sie Ihre Sitzungen serverseitig vornehmen: user-agent speichert nur die Sitzungs-ID, und alle Benutzerdaten werden gespeichert Ihre Datenbank. Der Benutzer benötigt sein Zugriffstoken nicht, nur Ihre Anwendung.

Instructions für die Implementierung von serverseitigen Sessions für Django sehen ziemlich einfach:

Wenn Sie eine Datenbank-backed-Sitzung verwenden möchten, müssen Sie 'django.contrib.sessions' auf Ihre INSTALLED_APPS Einstellung hinzuzufügen.

Nachdem Sie Ihre Installation konfiguriert haben, führen Sie manage.py migrate aus, um die einzelne Datenbanktabelle zu installieren, in der Sitzungsdaten gespeichert sind.