Frage an die API-Nutzer
Posted: Tue 27. Apr 2021, 14:17
Ich brauche mal ein wenig Input bzw. Entscheidungshilfe ...
Folgende Aufgabenstellung / Vorab-Informationen:
---
Über die KeyHelp-API sollen Benutzeraccounts von KeyHelp-Server-A zu KeyHelp-Server-B migriert werden.
Nahezu alle Passwörter im KeyHelp werden in Hash-Form gespeichert.
Stand jetzt: Man kann über die API nur Klartext-Passwörter setzen. Eine Migration wäre somit nur sofern möglich, wenn alle Passwörter (Email, KeyHelp-Account, FTP, etc) im Zuge der Migration neu festgelegt werden, der Nutzer also neue Zugangsdaten bekommt.
---
Variante 1)
-> So belassen wie es aktuell ist. Der Nutzer muss sich ggf. auch mit einem anderen Hostnamen verbinden, muss somit ohnehin seine Zugangsdaten ggf. anpassen. Allerdings umso mehr Datensätze bestehen, umso umständlicher wird dieses Anpassen.
Variante 2)
-> Bei allen entsprechenden API-Endpoints kommt das Feld "password_hash" dazu. Welches man sowohl bei [GET] lesen, als auch bei [POST] / [PUT] beschreiben kann.
Z.B. Kann man so bei Server-A alle Email-Accounts und dessen Feld "password_hash" auslesen, um sie dann bei Server B wieder exakt so einzuspielen - inklusive des derzeitigen Passworts, da der Passwort-Hash 1-zu-1 übernommen wird.
Der Kunde muss nun lediglich seinen Hostnamen bei den Verbindungseinstellungen seines Email-Clienten anpassen.
Variante 3)
Wie 2), aber das Feld "password_hash" muss erst z.B. extra query Parameter:
https://<KeyHelp-Server>/api/v1/emails/?password_hash=1
... aktiviert werden, erst dann taucht das Feld im Response-Body des API-Requests auf, bzw. erst dann kann es beschrieben werden.
Variante 3 ist vll. ein bisschen zu pedantisch, allerdings mag ich mich auch nicht recht damit anfreunden, bei Variante 2) immer den Password-Hash bei allen entsprechenden API-Endpunkten mit auszugeben - obwohl dies im Sinne der Dokumentation wahrscheinlich am einfachsten zu verstehen ist. Wenn man halt mit dem Feld "password_hash" nichts anfangen kann, dann ignoriert man es einfach.
Besten Dank für eure Eingaben .
(@Mods, Bewusst kein Vote erstellt, um das Ergebnis nicht zu verfälschen.)
Folgende Aufgabenstellung / Vorab-Informationen:
---
Über die KeyHelp-API sollen Benutzeraccounts von KeyHelp-Server-A zu KeyHelp-Server-B migriert werden.
Nahezu alle Passwörter im KeyHelp werden in Hash-Form gespeichert.
Stand jetzt: Man kann über die API nur Klartext-Passwörter setzen. Eine Migration wäre somit nur sofern möglich, wenn alle Passwörter (Email, KeyHelp-Account, FTP, etc) im Zuge der Migration neu festgelegt werden, der Nutzer also neue Zugangsdaten bekommt.
---
Variante 1)
-> So belassen wie es aktuell ist. Der Nutzer muss sich ggf. auch mit einem anderen Hostnamen verbinden, muss somit ohnehin seine Zugangsdaten ggf. anpassen. Allerdings umso mehr Datensätze bestehen, umso umständlicher wird dieses Anpassen.
Variante 2)
-> Bei allen entsprechenden API-Endpoints kommt das Feld "password_hash" dazu. Welches man sowohl bei [GET] lesen, als auch bei [POST] / [PUT] beschreiben kann.
Z.B. Kann man so bei Server-A alle Email-Accounts und dessen Feld "password_hash" auslesen, um sie dann bei Server B wieder exakt so einzuspielen - inklusive des derzeitigen Passworts, da der Passwort-Hash 1-zu-1 übernommen wird.
Der Kunde muss nun lediglich seinen Hostnamen bei den Verbindungseinstellungen seines Email-Clienten anpassen.
Variante 3)
Wie 2), aber das Feld "password_hash" muss erst z.B. extra query Parameter:
https://<KeyHelp-Server>/api/v1/emails/?password_hash=1
... aktiviert werden, erst dann taucht das Feld im Response-Body des API-Requests auf, bzw. erst dann kann es beschrieben werden.
Variante 3 ist vll. ein bisschen zu pedantisch, allerdings mag ich mich auch nicht recht damit anfreunden, bei Variante 2) immer den Password-Hash bei allen entsprechenden API-Endpunkten mit auszugeben - obwohl dies im Sinne der Dokumentation wahrscheinlich am einfachsten zu verstehen ist. Wenn man halt mit dem Feld "password_hash" nichts anfangen kann, dann ignoriert man es einfach.
Besten Dank für eure Eingaben .
(@Mods, Bewusst kein Vote erstellt, um das Ergebnis nicht zu verfälschen.)