Benutzer sollen sich am System anmelden können. Ich dachte mir, die speichern wir einfach in einer relationalen Datenbank, da Qt dafür schon Bibliotheken mitbringen (MySQL, PostgreSQL, SQLite). Welches DBMS wir nehmen, weiß ich noch nicht.
Dennoch muss die Benutzerauthentifizierung ja implementiert werden. Naiv könnte man das so machen:
- Client schickt Benutzernamen und Kennwort an Server
- Server prüft per Datenbank Benutzernamen und Kennwort
- Server gibt OK oder NK zurück
Jetzt will ich aber, wenn auch verschlüsselt, keinen Benutzernamen und kein Kennwort einfach durch die Gegend schicken. Meine Idee war folgende:
- Auf dem Server sind Benutzername und Kennwort in der Datenbank hinterlegt, wobei das Kennwort gehasht ist
- Client meldet sich bei Server, dass er sich authentifizieren will
- Server schickt einen einfache String (z.B. eine UUID) an den Client
- Der Client hasht sein Kennwort in der selben Weise, wie der Server, und fügt im String Benutzernamen und Kennwort zusammen (thorstenAdsfjlksudSDFAalsj)
- Mit dem zusammengefügten Benutzernamen und gehashten Kennwort verschlüsseln wir den vom Server geschickten String (z.B. die UUID)
- Den verschlüsselten String schicken wir an den Server zurück
- Der Server prüft den verschlüsselten String mit seinem eigenen (er macht das selbe online)
- Der Server gibt OK oder NK zurück
Was haltet ihr davon? Eine gute Idee? Hat jemand eine bessere?