So erzeugen Sie eine einzigartige auth-token in python?
Ich bin versucht zu schreiben, eine token-basierte auth Kolben für meine android-app. Dafür brauche ich eine eindeutige "token", mit denen ich überprüfen kann, der user.
Itsdangerous Bibliothek bieten eine JSONWebSignatureSerializer-Funktion, über die ich erstellen kann JWT token. Also meine erste Frage ist, ist es sicher, JWT für mobile-basierte auth ?
Zweitens, ich habe ein wenig Forschung auf, wie django rest framework generiert die token.
def generate_key(self):
return binascii.hexlify(os.urandom(20)).decode()
Ist dieses token unique, oder nur eine zufällige? Welche soll ich verwenden für eine mobile-basierte auth?
Was ist der Weg zur Erzeugung von eindeutigen token für mobile Anwendungen in python ?
anstatt neu zu erfinden das Rad (in der Regel nicht eine gute Idee, vor allem für die Sicherheit) warum nicht eine Lösung wie Kolben-jwt?
InformationsquelleAutor Saprative Jana | 2016-12-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf die uuid() library. Docs sind hier:
https://docs.python.org/2/library/uuid.html
und eine frühere Diskussion der Frage ist hier:
So erstellen Sie eine GUID/UUID in Python
mit vielen guten details.
Ist diese Diskussion hilfreich? Django hat uuid eingebaut. stackoverflow.com/questions/3936182/...
InformationsquelleAutor vielmetti
Können Sie wie erwähnt die builtin
uuid
Modul. Die neuesecrets
Modul veröffentlicht in 3.6 ist auch in der Lage, die Erstellung von einzigartigen Token auch.Folgende Funktion erstellt einen eindeutigen token jedes mal, wenn es aufgerufen wird. Die
os.urandom
Methode gibt 20 zufällige bytes als string und diebinascii.hexlify
Methode wandelt jede dieser 20 bytes in 2-stellige hex-Darstellung von byte. Dies ist der Grund, warum der Rückgabewert ist doppelt so lang.Wenn Sie möchten, verwenden Sie diesen Ansatz, und müssen Token zu bestimmten Länge verwenden Hälfte der Länge, die Sie benötigen als argument für die
os.urandom
Methode.InformationsquelleAutor Sean Parsons
OK, das ist alt, aber ich bin Geläute in sowieso. Sie müssen sich entscheiden: wollen Sie einmalig oder zufällig? Wählen Sie einen aus.
Wenn Sie wollen einzigartige UUID. Der Sinn und Zweck von UUIDs ist, um sicherzustellen, dass Sie etwas erzeugen, die einzigartig ist. UUID steht für Universally Unique ID.
Wenn Sie wollen etwas, das zufällige, verwenden Sie
os.urandom
. Wirklich zufällige Ergebnisse nicht darauf beschränkt werden, uniqueness constraints! Würd das machen Sie nicht zufällig. In der Tat, es würde machen Sie UUIDs.Nun für Ihre Frage, die Sie Fragen, für die ein auth-token. Das bedeutet, dass Sie mit diesem für Zwecke der Gefahrenabwehr. UUIDs sind die falsche Lösung und erzeugen eine sichere Nummer ist die richtige. Konnte Sie eine Kollision bei der Generierung einer Zufallszahl statt eines UUID? Ja. Aber es ist unwahrscheinlich, es sei denn, du hast eine Unmenge Benutzer. Sie möchten Ihre mathematischen, aber meine Empfehlung ist: benutze nicht die UUID, wenn du meinst, auf random.
Oy.
InformationsquelleAutor mlissner
Ich schrieb eine kleine helper-Funktion für die Generierung eines eindeutigen Tokens in django Modelle. Sie können es nennen, von der
save()
- Methode des Modells. Es erzeugt ein Kandidat token mithilfe einer angegebenen Funktion, sucht die vorhandenen Zeilen in der Datenbank für die Kandidaten-token. Wenn er eine findet, es versucht, wieder, sonst, es gibt die Kandidaten-Zeichenfolge. Beachten Sie, dass es ist eine kleine Rasse in diesem Zustand, aber ist sehr unwahrscheinlich mit einer token-Funktion mit einer ausreichend großen Palette der Ausgänge.Dann finden Sie eine einzigartige token ganz einfach, indem Sie
Sondern unterstützt auch mit anderen Methoden zum generieren von Token. Zum Beispiel, wenn Sie wollen, um die volle uuid haben, können Sie einfach rufen Sie es wie folgt:
Vielleicht, aber das ist wirklich nützlich, wenn Sie wollen zu bekommen eine kürzere token,
Ja, der Zweck von UUIDs ist...in seinem Namen! Universell Eindeutige IDs! Dies ist eine wirklich seltsame Antwort.
UUIDs haben die unglückliche Eigenschaft, sich ziemlich lange. Wenn Sie einfach abschneiden, den token, werden Sie dann Einbußen bei der Kollision Widerstand. Sie können nicht dann einfach nur speichern Sie das token in die Datenbank und nehme an, dass das token wird einzigartig sein.
InformationsquelleAutor George Griffin