Come autenticare al meglio un client desktop con un backend scalabile tramite il servizio SOAP / REST?

1

Sto cercando di trovare un'architettura solida per l'autenticazione degli utenti rispetto a un database. Ho un client di gioco, con cui prevedo di presentare una richiesta. Il trasporto non ha molta importanza, ma a questo punto sto pensando a http e sfruttando SSL o ws-security per garantire la crittografia dei dati sul filo.

Vorrei evitare gli attacchi degli uomini centrali, se possibile, quindi mi sto appoggiando alla sicurezza della ws anche se so che costa di più.

Per quanto riguarda il servizio, mi piacerebbe utilizzare un framework di autenticazione come - link - per autenticare gli utenti da un database mysql. Non sono sicuro di poter sfruttare le funzionalità della sessione o meno, dato che non l'ho cercato, ma sarebbe bello se potessi.

Probabilmente sarà un mix di memorizzare alcune informazioni di sessione nel database e se posso sfruttare le funzionalità di sessione di Shiro, allora questo è un bonus.

La mia vera domanda è l'handshake tra il client e il server. Se uso ws-security non è tutto ciò che mi interessa? Vale solo per questo? Vale la pena?

Se no, cosa dovrei fare qui? Voglio assicurarmi che tutte le richieste da parte del client siano autenticate, ma non voglio nemmeno dover passare da un anello all'altro per farlo accadere. Funzionerebbe qualcosa di semplice come l'autenticazione http digest qui?

Un vincolo che ho è l'accesso alle librerie. Se non è gratuito e non può essere utilizzato in un prodotto commerciale, non posso sfruttarlo. Il mio cliente verrà scritto in C ++ e posso usare qualsiasi lingua lo renda più semplice (sono incline a java) per farlo accadere sul lato server.

Ho intenzione di aggiungere il supporto per gli utenti per l'acquisto di oggetti di gioco attraverso micropagamenti in fondo alla strada, quindi questo meccanismo di stretta di mano deve sicuramente essere sicuro.

Continuo a sentire persone suggerire REST + SSL e ad esaminare il collegamento

È un'alternativa valida? Se lo usassi + qualcosa come Apache Shiro avrei un vincitore?

Qualunque cosa io usi, deve essere scalabile in quanto il sistema crescerà con gli utenti / volume di richieste nel tempo.

    
posta 19.01.2012 - 04:47
fonte

1 risposta

1

SSL non è vulnerabile a MITM, a meno che sul computer client non siano installati certificati CA root dannosi (nel qual caso non è possibile fare nulla poiché si potrebbe presumere che l'intero client sia compromesso). Se ottieni un certificato da una CA appropriata come Verisign ti verrà assicurato che tutte le comunicazioni con il tuo server saranno sicure (tranne in situazioni accademiche come l'informatica quantistica). Se si utilizza un canale crittografato durante la fase di autenticazione, è possibile utilizzare qualsiasi paradigma di serializzazione / comunicazione desiderato (REST, Protobuf, ecc.).

In altre parole, tutto ciò che devi fare alla fine della giornata è assicurarti che le password siano salate e sottoposte a hash nel tuo DB, preferibilmente a doppio salato in modo che la funzionalità "ricorda password" del cliente possa memorizzare un hash salato su il disco rigido; invece di una password di testo non crittografato.

In alternativa puoi esaminare:

  • SRP che non è necessario che si verifichi su un supporto sicuro.
  • TLS / SSL con autenticazione reciproca (utilizzando un certificato client). La cosa bella è che abilita scenari offline (LAN) in quanto i client possono autenticarsi l'uno con l'altro senza la presenza del proprio server di autenticazione.

WS-Security è principalmente orientato verso servizi federati, ad esempio cross-enterprise, (come la maggior parte delle estensioni WS-I) - che probabilmente non è una preoccupazione per te. Ad ogni modo, WS-Security ha il sovraccarico associato di SOAP (e dei framework / marshalling sottostanti necessari per gestire le chiamate SOAP). SOAP è un protocollo molto pesante ed è probabilmente una very scarsa scelta per lo sviluppo del gioco. Eviterei completamente questo.

    
risposta data 19.01.2012 - 09:41
fonte

Leggi altre domande sui tag