Ho sviluppato un'API REST i cui client sono app / siti web mobili sotto il mio controllo (API non è aperta a nessuno). Gli utenti accedono alla mia app / sito web mobile con i loro account di accesso Facebook o g +. Mi piacerebbe proteggere l'API in modo che:
(a) gli utenti possono accedervi solo dopo aver effettuato correttamente l'accesso a fb / g + tramite la mia app / sito web
o
(b) solo le mie app / siti web possono accedervi.
Ho pensato di seguire per (a) e apprezzerei il feedback su eventuali punti deboli o miglioramenti:
- Tutti i dati tra l'app per dispositivi mobili e l'API REST sono crittografati con TLS.
- L'utente accede alla mia app con le credenziali di Facebook / g +.
- L'app riceve il token da fb / g + e recupera le informazioni dell'utente.
- L'app invia le informazioni utente (nome utente / email / ID univoco) e il token all'API REST (ad esempio, / login).
- L'API REST utilizza il token e l'ID univoco per effettuare una chiamata di prova all'API fb / g + per garantire che le informazioni su token e le informazioni utente siano valide.
- L'API REST emette il proprio token per il token di app e cache con chiave per ID univoco.
- L'app invia un ID univoco e un token con ogni accesso successivo all'API REST.
- API REST ricerca ID univoco e token nella cache. Se esiste, l'accesso API è concesso a tale richiesta.
Mi piacerebbe eliminare il passaggio 5, ma non vedo in che altro modo verificare le credenziali fornite all'API REST.
Ho anche pensato di utilizzare l'autenticazione HTTP di base e TLS per (b), e questo andrebbe bene per un client di un sito Web, ma per le app mobili, significa che la password dovrebbe essere memorizzata nell'app mobile in qualche modo e suscettibile di esposizione, non è vero? Da quanto ho capito, la protezione di un'API con Basic Auth e TLS è molto comune e posso vedere come può funzionare per i siti Web, ma non conosco un modo per ottenere (b) per le app mobili senza mettere a rischio l'esposizione della password .