2014-09-16 2 views
11

Google Auth Util consente agli sviluppatori Android di verificare che le richieste ricevute dai server provengano da un dispositivo Android.GoogleAuthUtil come dispositivo di autenticazione per iOS per verificare che le richieste provengano da un dispositivo Apple

Il dispositivo riceve un token da Google in base all'account Google associato al dispositivo, quindi le richieste dal dispositivo vengono inviate con quel token al server, dove il server chiede a Google se il token è valido. Tutte le chiavi vengono mantenute fuori dalla sorgente dell'app, quindi i malintenzionati non possono decifrare l'app e accedere alle chiavi private e alle richieste fudge sul server.

Ho cercato per un po 'e sembra che Apple non offre nulla di simile, ma speravo che ci fosse qualcosa di funzionale che potrei usare per iOS.

risposta

1

Aggiornamento

Mentre il presupposto implicito nella domanda sembra ragionevole, non è effettivamente vero. Ulteriori letture delle fonti di Google rivelano che lo scopo di Auth Util (e successivo Firebase) è di autenticare l'utente e proteggere il server. Dato che il server vede solo il traffico di rete, è possibile replicare il traffico da un altro client.

Inoltre, la definizione di Android è piuttosto sfocata, in quanto OEM modifica il SO di base in base alle proprie esigenze.

questo è probabile sbagliato

Una possibilità è quella di utilizzare il Apple Push Notification. È possibile registrare un dispositivo e push notifications specifically to it. Quando l'app viene caricata, invia una richiesta al server con il suo device token e riceve essenzialmente un cookie di sessione tramite l'APN.

Un'avvertenza è quella it is not encrypted. Puoi facilmente risolvere questo problema inviando una chiave simmetrica generata a caso nella richiesta. Il cookie che ricevi verrebbe crittografato sul server e decifrato utilizzando la stessa chiave nel dispositivo iOS.

Questo risolve il problema di memorizzare chiavi nell'origine e dimostra che le richieste provenivano da un dispositivo iOS.

Naturalmente, questo può essere semplificato generando un certificato, memorizzandolo nella catena di chiavi e inviando la chiave privata al server per l'archiviazione durante la registrazione. Dopo la registrazione iniziale e la convalida tramite APN, i messaggi successivi possono essere firmati utilizzando l'id del dispositivo + la chiave pubblica del certificato.

Un ultimo problema è che APN può essere utilizzato anche per registrare dispositivi OSX. Non sono stato in grado di capire come escludere quelli (ancora).

Disclaimer: è stata una lunga giornata di scrittura delle specifiche. Sono ragionevolmente a mio agio con il meccanismo di registrazione iniziale del dispositivo iOS usando APN. Potrei aver sbagliato le parti di crittografia. Se è così, commenta gentilmente, per favore.