Sto creando un Qt-server che usa SSL via TCP. I client possono autorizzarsi sul server utilizzando login e password e diventare utenti. Solo gli utenti possono eseguire qualsiasi azione con i loro account. I clienti non autorizzati possono autorizzare solo se stessi.
Ora l'autorizzazione ha questo aspetto:
- Il client si connette al server.
- Il client invia le credenziali (login, password) al server.
- Il server autentica le credenziali e autorizza il client come utente, questo significa che ora il socket di quel client è autorizzato come utente, ma il server non ha alcun "token" e / o altre cose.
Come puoi vedere, questo schema non è completo e non è sicuro.
Quindi, la domanda principale: come dovrei migliorarla?
All'inizio penso che dovrei usare i token di autenticazione. Devo generarli sul server dopo l'autorizzazione del client e inviarli al client. Successivamente, il client deve inviare questo token al server in ogni richiesta come conferma della sua autenticità.
Tuttavia, ho molte domande a riguardo e non solo:
- Come dovrei generarli? È solo tipico UUID o dovrei usare qualche specifico algoritmo di generazione?
- Perché non posso autorizzare un socket specifico come utente e usarlo, fino a quando il socket non è chiuso?
- Dove conservare questo token sul lato server?
- In che modo il client si riconnetterà al server?
- In che modo il client si connetterà al server dopo la riapertura dell'applicazione?
- Quali dati devono essere archiviati sul lato client per la riautorizzazione senza l'intervento dell'utente (senza reinserire login e password)?
- Cos'altro devo sapere sui token di autenticazione?
- E infine, come migliorare questo schema ad eccezione dell'utilizzo dei token?