Ich lerne über Token-basierte Authentifizierung mit JSON Web Token und hier ist, wie ich es jetzt für eine mobile App, mit z. Swift:Token-basierte Authentifizierung von einer mobilen App
ich ein Objekt in der App-Eingang mit Benutzer erstellen kann, wie
{ Benutzername: "PatrickBateman", Kennwort: "ismyknifesharp", Rolle: "regular", . .. }
Dann kann ich ein JWT-Token von ihm mit einem library generieren.
- Dann sende ich es an einen unterstützten API-Endpunkt, wie
/api/contacts/list
. Oder muss ich Login/Passwort senden, um sich zu authentifizieren? - Server überprüft irgendwie die Token-Korrektheit. Aber wie? Sollte dieses servergenerierte Token in der Datenbank gespeichert und als Schlüssel verwendet werden? Oder muss ich das Token auf dem Server jedes Mal generieren, wenn ich eine Anfrage vom Client bekomme und diese mit dem Client-Token vergleiche?
- Holen und verwalten Sie alle Daten, die ich brauche.
Hier sind meine Schlussfolgerungen:
- Ich brauche nicht Login/Passwort-Paar an den Server zu senden, um den Benutzer zu authentifizieren.
- Ich muss jedes Mal Token senden, wenn ich Auth-only Daten bekommen muss.
- Ich sollte einen Algorithmus implementieren, der das generierte Token aufgrund einiger Faktoren, wie Zeitüberschreitung, ändert, damit Token ablauffähig werden.
- Ich sollte das Token innerhalb der Header senden, aber nicht unbedingt, wie es im Körper der JSON-Anfragen getan werden kann.
Sind diese Schlussfolgerungen richtig? Wie überprüfe ich das Token, das der Client sendet?
Warum ist es keine gute Idee, das Passwort und den Benutzernamen auf der Client-Seite zu behalten? In iOS können wir sie in Keychain sicher speichern, oder? – user805981
Auch wenn wir sie sicher aufbewahren können, aber das hat keinen Vorteil. Wir sollten das gespeicherte Passwort nicht zur erneuten Anmeldung verwenden. Der gute Weg ist, mit dem Token zu arbeiten oder zu verlangen, dass der Benutzer sein Passwort erneut über das Login-Formular eingibt. – t4nhpt
Ich verstehe. Und wenn wir JWT- und Refresh-Token verwenden würden. Sollten wir feststellen, ob der JWT auf der Client-Seite abgelaufen ist, bevor irgendwelche HTTP-Anfragen gesendet werden? Oder sollten wir den JWT ablaufen lassen und dem Client eine 400 zurückgeben, bevor wir in einen Aktualisierungszyklus eintreten? – user805981