Obiettivo: consentire a un utente di eseguire l'autenticazione con Facebook in un'applicazione iOS che richiede l'accesso a un servizio Web protetto che sto eseguendo.
Presupposti: esiste un sistema di autenticazione (e registrazione) nativo per quegli utenti che scelgono di non utilizzare Facebook per accedere.
Dettagli:
- Supponiamo di voler offrire la possibilità a un utente di accedere con Facebook senza creare un account / credenziali separato per il nostro sistema.
- Poiché supportiamo il nostro meccanismo di autenticazione nativo (nome utente e password) abbiamo i nostri ID utente ed emettiamo un token di autenticazione che viene utilizzato per le interazioni successive dopo la convalida iniziale delle credenziali.
Sono sorpreso che Facebook non abbia le migliori pratiche per questo nella documentazione per gli sviluppatori. Tutta la documentazione esistente presuppone che tu stia inserendo l'autenticazione FB in un sito Web o un'app mobile autonoma senza servizio che richiede autenticazione.
Ecco i miei pensieri iniziali su come questo sarebbe stato progettato, ma voglio convalidare se è corretto.
- Il client apre l'accesso iOS di Facebook
- L'interfaccia utente accede con le credenziali di Facebook e ottiene il token di accesso
- L'app iOS passa il token di accesso al nostro server
Il nostro server comunica con l'API del grafico FB utilizzando il token di accesso per (a) convalidare il token e (b) ottenere l'ID utente FB per quel token di accesso.
es. Il nostro server chiamerebbe https://graph.facebook.com/me/?access_token=XYZ che restituirebbe le informazioni del profilo in un oggetto JSON
Supponendo che sia valido, il nostro server estrae l'ID utente dall'oggetto JSON e controlla se l'utente ha già un account. In tal caso, emettiamo il nostro ticket di autenticazione al client da utilizzare per quella sessione. Se l'utente non ha un account, ne creiamo uno nuovo con l'ID utente di Facebook, assegniamo il nostro ID utente univoco ed emettiamo il nostro ticket di autenticazione.
- Il client quindi restituisce il ticket di autenticazione sulle interazioni successive che richiedono l'autenticazione.
Questo mi sembra l'approccio giusto ma non sono sicuro che mi manchi qualcosa di follemente di base e stia andando sulla strada sbagliata (complicata).