it-swarm.com.de

Sicheres Speichern von OpenID-Kennungen und OAuth-Token

Ich erstelle eine Web-App, die OpenID-Logins und OAuth-Token mit Youtube verwendet. Ich speichere derzeit die OpenID-Identität und das OAuth-Token/Token geheim in der Datenbank.

Ist es unangemessen, diese Werte als reinen Text zu speichern? Ich könnte eine einseitige Verschlüsselung für den OpenID-Bezeichner verwenden, aber ich weiß nicht, ob dies notwendig ist. Für die OAuth-Token müsste ich eine bidirektionale Verschlüsselung verwenden, da meine App das Session-Token für einige Zwecke benötigt.

Muss die OpenID-Identität verschlüsselt werden? Könnte jemand damit Zugang zu einem Benutzerkonto erhalten?

55
Matt McCormick

Erstens gibt es eine registrierte Anwendung mit consumer_key und consumer_secret.

Wenn Benutzer Ihre registrierte Anwendung authentifizieren und "zulassen", erhalten Sie Folgendes zurück: Einen access_token, der als "Passwort" des Benutzers gilt und JUST DEINE Anwendung erlaubt, im Namen des Benutzers zu handeln.

Wenn Sie also nur den access_token des Benutzers aus Ihrer Datenbank erhalten, hilft dies nicht viel, wenn er nicht auch consumer_key und consumer_secret für vollständigen Zugriff hat.

Der Dienstanbieter vergleicht auf Anfrage alle 4 Parameter. Es wäre klug, diese 4 Parameter vor dem Speichern zu verschlüsseln und sie vor der Antwort zu entschlüsseln.

Dies ist nur dann der Fall, wenn Sie im Namen eines Benutzers den Ressourceninhaber des Benutzers aktualisieren oder Änderungen daran vornehmen müssen. Verwenden Sie Sitzungen, um einen Benutzer an Ihrer Site angemeldet zu halten.

27
Feha

Das OAuth-Token und das Geheimnis sollten natürlich in Ihrer Datenbank sicher aufbewahrt werden. Sie können sie jedoch nicht mithilfe der 1-Wege-Verschlüsselung auf dieselbe Weise speichern, wie Sie es für ein Kennwort tun würden. Der Grund ist, dass Sie das Token und das Geheimnis benötigen, um die Anforderung signieren zu können.

Dies wäre auch der Fall, wenn Sie einen OAuth-Server betreiben und Sie noch das ursprüngliche Token/Geheimnis benötigen, um die Anforderung zu überprüfen.

Wenn Sie möchten, können Sie sie dennoch mit einem 2-Wege-Verschlüsselungsalgorithmus wie AES verschlüsseln, um Sicherheit für den Fall zu bieten, dass Ihre Datenbank oder Datenbanksicherungen gefährdet werden.

19
Pelle

Hier gibt es zwei Denkrichtungen.

Das erste Argument lautet: Sie sollten OAuth-Token wie Kennwörter behandeln. Wenn jemand auf Ihre Datenbank zugreifen, alle OpenID/OAuth-Paare abrufen und einen Man-in-the-Middle-Angriff durchführen möchte, könnte er sich als beliebiger Benutzer auf Ihrer Site ausgeben.

Das zweite Argument ist folgendes: Wenn jemand Zugriff auf Ihre Datenbank hat und ausreichend Zugriff auf Ihr Netzwerk hat, um einen Man-in-the-Middle-Angriff auszuführen, sind Sie sowieso abgeschossen.

Ich würde persönlich auf Nummer sicher gehen und sie einfach verschlüsseln. Dies ist eine Standardpraxis für Passwörter. Sie können sich also genauso gut ein bisschen Ruhe gönnen.

Inzwischen hat Google diesen Ratschlag:

"Token sollten genauso sicher behandelt werden wie alle auf dem Server gespeicherten sensiblen Informationen."

quelle: http://code.google.com/apis/accounts/docs/OAuth.html

Und ein zufälliger Typ im Web hat spezifische Umsetzungshinweise:

  • Wenn sie sich in einer regulären Datenträgerdatei befinden, schützen Sie sie mit den Berechtigungen des Dateisystems , Stellen Sie sicher, dass sie Verschlüsselt sind, und verbergen Sie das Kennwort gut
  • Wenn sie sich in einer Datenbank befinden, verschlüsseln Sie die Felder, speichern Sie den Schlüssel Gut und schützen Sie den Zugriff auf die Datenbank sorgfältig. *
  • Wenn sie sich in LDAP befinden, machen Sie dasselbe.

http://brail.org/wordpress/2009/05/01/implementing-oauth-take-care-with-those-keys/

11
Ben Walther

OpenID-URL sollte nicht verschlüsselt werden, da dies Ihre "offene ID" ist. Jeder sollte den Wert kennen. Außerdem muss die URL ein Index in der Datenbank sein und es ist immer problematisch, den Index in der Datenbank zu verschlüsseln. 

OAuth-Token/geheim sollte geheim sein und die Verschlüsselung kann die Sicherheit verbessern, wenn Sie das Token langfristig speichern müssen. In unserer OAuth-Consumer-Anwendung wird Token/Secret nur für kurze Zeit in einer Sitzung gespeichert, und wir entscheiden uns dafür, sie nicht zu verschlüsseln. Ich denke, das ist sicher genug. Wenn jemand einen Blick in unseren Sitzungsspeicher werfen kann, hat er wahrscheinlich auch unseren Verschlüsselungsschlüssel.

0
ZZ Coder

Ja, diese sollten symmetrisch verschlüsselt sein (z. B. AES-256 im CBC-Modus), wenn sie sich in einer Datenbank befinden. Eine einfache Methode zum Verschlüsseln dieser Token ist die Verwendung der Verschlüsselung von SecureDB als Service-RESTful-APIs. 

Offenlegung: Ich arbeite bei SecureDB.

0
Rettel