2013-01-04 10 views
9

Ich versuche, Authentifizierungsfunktion zu meiner Anwendung hinzuzufügen. Der Authentifizierungsserver implementiert oauth 2.0Wie Refresh-Token gespeichert werden sollte

Ich bin mir nicht sicher, wie Sie das Refresh_Token speichern. Ich möchte es in einer Datei speichern, damit das nächste Mal, wenn die Anwendung gestartet wird und ein Refresh_Token verfügbar ist, ein neues access_token angefordert werden kann. Der Benutzer muss sich nicht erneut anmelden.

aber das klingt nicht sicher für mich, denn wenn jemand meine Datei, die das Refresh_Token auf einen anderen Computer kopiert hat, kann er in mein Konto hacken.

Antwort

7

Sie haben Recht mit dem Angriff, den Sie beschreiben. Refresh-Tokens müssen sicher gespeichert werden, um bestimmungsgemäß verwendet zu werden. Soweit ich weiß, erstellen Sie eine eigenständige Anwendung. Daher können Sie sich auf die Sicherheit des Dateisystems verlassen, um zu verhindern, dass ein Aktualisierungstoken von einem nicht autorisierten Benutzer kopiert wird. Möglicherweise möchten Sie auch die Verschlüsselung für das Aktualisierungstoken verwenden, der Schlüssel muss jedoch an die Sitzung eines Benutzers auf Ihrem lokalen Computer gebunden sein (andernfalls müsste der Benutzer diese während des Anmeldeprozesses für die Anwendung bereitstellen Entschlüsseln des Aktualisierungstokens).

Betrachten Sie den Faden von der OAuth WG zu lesen, die ähnliche Probleme mit dem diskutiert wird beschrieben und liefert einige Hinweise: http://www.ietf.org/mail-archive/web/oauth/current/msg02292.html

+1

Bitte klicken Sie hier https://developers.google.com/api-client-library/python/guide/aaa_oauth für einen Abschnitt mit der folgenden Codezeile: 'from oauth2client.file import Storage'. Wenn ich diesen Code zum Erstellen von Speicher verwendete, erstellte er einfach eine reine JSON-Datei, die alle Informationen enthielt. Einer der Vorteile dieser Klasse "oauth2client.file.Storage" ist, dass sie Thread-sicher ist. Allerdings wird hier keine Verschlüsselung verwendet, daher bin ich zerrissen. Google empfiehlt, ihre Bibliotheken wann immer möglich zu verwenden, um "Dinge zu vermasseln". Diese Storage-Klasse tut jedoch nicht viel. Gedanken? – Leonid

0

Sie haben Recht, über Ihre Sorge - Sie sollten nicht die Aktualisierungs-Token speichern. Dadurch gefährden Sie die Daten Ihres Kunden (und Sie kennen den Grund; Sie haben ihn in der Frage geschrieben). oAuth soll nicht so funktionieren. Sie sollten das Aktualisierungstoken im Speicher behalten.

+3

Aber dann würde das Refresh-Token verloren gehen, wenn es nicht mehr im Speicher wäre, und er würde den Benutzer zum Zugriff auffordern müssen, bevor er seine Anwendung erneut ausführen würde. –

+0

@JasonHall True; Um zu vermeiden, den Benutzer nach seinen Anmeldeinformationen zu fragen, muss der Anwendungsentwickler zustimmen, die Sicherheit des Benutzers zu gefährden (wenn das Token irgendwie gestohlen wird). – OhadR

+1

Sie können die Anmeldeinformationen verschlüsseln oder auf Ihrem Server speichern und sie (sicher) abrufen, wenn die Anwendung gestartet wird. Aber wenn das nicht machbar ist, dann könntest du einfach um Erlaubnis bitten, wenn die App startet. –

1

Refresh-Token werden verwendet, um Zugriff zu erhalten (dieser Prozess erfordert HTTP Basic Auth). Also, wenn der Benutzer nicht Ihre (id, geheime) Kombination hat, kann er nicht viel dagegen tun. Das Speichern des Aktualisierungstokens muss jedoch sehr ernst genommen werden.

Hier ist meine zwei Cent:

  1. Speichern Sie Ihre Jetons in einem DB

  2. Wenn Sie Aktualisierungs-Token verwenden, um Zugriff zu erhalten Token die Refresh-Reset als auch Token. (OAuth2.0 über diese Funktion verfügt, können Sie den Aktualisierungs-Token unverändert lassen, aber es ist klug, in Bezug auf die Sicherheit Perspektive zu halten es zu ändern und die Aktualisierung der DB)

Hope this gibt Einblicke !!

Verwandte Themen