2017-12-23 2 views
1

Ich implementiere Authentifizierung in meiner App mit einem Token.Effizientes Vergleichen von gegebenem Token mit gehackten, gesalzenen Tokens in der db

Beim Generieren eines Tokens wird das eigentliche Token an den Client zur Speicherung in einem Cookie gesendet, während das Hash-Token in der Datenbank zusammen mit dem Salz gespeichert wird, das während des Hashing verwendet wurde.

Jetzt, um einen Benutzer zu authentifizieren, muss ich das angegebene Token mit denen in der Datenbank gespeichert vergleichen, die scheint, jeden einzelnen Eintrag in der Datenbank zu überprüfen, da salt für jedes Token eindeutig ist.

Um es zu wiederholen, muss ich wie etwas tun würde:

for saved_token in all_saved_tokens: 
    hashed_token = hash_token_with_salt(actual_hash_from_client, saved_token.salt) 
    if hashed_token == saved_token.hashed_token: 
     return saved_token.user 

Da dies bei jedem Aufruf geschehen muss, so scheint es unglaublich ineffizient.

Die Frage ist also:

Kann ich es irgendwie noch effizienter angesichts der Art, wie ich speichern die Informationen über Token?

Ich könnte natürlich den Benutzernamen des Benutzers in einem Cookie speichern und es in einem Anruf zusammen mit dem Passwort übergeben, so dass ich die Suche in der Datenbank eingrenzen kann, aber im Idealfall würde ich lieber nur ein Token verwenden halte die Dinge schön und ordentlich.

Antwort

0

warum nicht die Hash-Token speichern einen Index für die Hash-Token auf den db und fügen Sie so, dass Sie

+0

nicht Iterierte brauche ich irgendwie brauchen würde, diesen Index zu erhalten, auch, würde ich nicht? –

Verwandte Themen