Per l'accesso per un'app web o per computer tramite browser senza usare gli SDK, come in una visualizzazione web in un'app nativa per computer (ad esempio, su Windows 8) o un flusso di accesso usando interamente codice lato server, puoi creare un flusso di accesso personalizzato usando i reindirizzamenti del browser. Questa guida spiega in modo dettagliato il flusso di accesso, mostrando come implementarne i passaggi senza usare i nostri SDK:
Per usare Facebook Login in un'app per computer, dovrai poter incorporare un browser web (a volte chiamato visualizzazione web) all'interno dell'app per eseguire il processo di accesso.
Le app che utilizzano i nostri SDK possono verificare se una persona ha effettuato l'accesso tramite funzioni integrate. Tutte le altre app devono creare il proprio modo di memorizzazione dell'accesso di una persona, e, in assenza di questo indicatore, ritenere che la persona si sia disconnessa. Se una persona si è disconnessa, l'app dovrà reindirizzarla alla finestra di dialogo Accedi al momento appropriato, ad esempio quando clicca sul pulsante Accedi.
Se una persona non ha effettuato l'accesso all'app o a Facebook, puoi utilizzare la finestra di dialogo Accedi per richiederle di effettuare entrambe le azioni. Se la persona non ha effettuato l'accesso a Facebook, le verrà chiesto di accedere prima a Facebook e poi alla tua app. Questa azione verrà rilevata automaticamente, pertanto non è necessario che tu esegua ulteriori operazioni per abilitare questo comportamento.
La tua app deve eseguire un reindirizzamento a un endpoint che visualizzerà la finestra di dialogo Accedi:
https://www.facebook.com/v21.0
/dialog/oauth?
client_id={app-id}
&redirect_uri={redirect-uri}
&state={state-param}
Questo endpoint prevede i seguenti parametri necessari:
client_id
. L'ID della tua app si trova nella dashboard dell'app.redirect_uri
. L'URL a cui desideri reindirizzare l'utente al momento dell'accesso, che acquisisce la risposta della finestra di dialogo Accedi. Se lo usi nella visualizzazione web di un'app per computer, deve essere impostato su https://www.facebook.com/connect/login_success.html
. Puoi confermare che questo URL è impostato per la tua app nella Dashboard gestione app. In Prodotti nel menu di navigazione a sinistra della Dashboard gestione app, clicca su Facebook Login, quindi clicca su Impostazioni. Verifica gli URI di reindirizzamento OAuth validi nella sezione Impostazioni OAuth client.state
. Un valore di tipo stringa creato dalla tua app per mantenere il parametro state tra la richiesta e la callback. Questo parametro deve essere usato per impedire attacchi Cross-site Request Forgery e verrà passato di nuovo a te, invariato, nel tuo URI di reindirizzamento.Ad esempio, se la tua richiesta di accesso è simile alla seguente:
https://www.facebook.com/v21.0
/dialog/oauth?
client_id={app-id}
&redirect_uri={"https://www.domain.com/login"}
&state={"{st=state123abc,ds=123456789}"}
il tuo URI di reindirizzamento verrà chiamato in questo modo:
https://www.domain.com/login?state="{st=state123abc,ds=123456789}"
Inoltre, prevede i seguenti parametri facoltativi:
response_type
. Determina se i dati della risposta inclusi quando si verifica il reindirizzamento all'app rientra nei parametri o nei frammenti di URL. Consulta la sezione Conferma delle identità per scegliere quale tipo usare nella tua app. Può essere uno tra:
code
. I dati della risposta sono inclusi come parametri URL e contengono il parametro code
(una stringa crittografata unica per ogni richiesta di accesso). Si tratta del comportamento predefinito se questo parametro non viene specificato. È più utile per la gestione del token da parte del server.token
. I dati della risposta sono inclusi come un frammento di URL e contengono un token d'accesso. Le app per computer devono usare questa impostazione per il valore response_type
. È più utile per la gestione del token da parte del client.code%20token
. I dati della risposta sono inclusi come un frammento di URL e contengono un token d'accesso e il parametro code
.granted_scopes
. Restituisce una lista separata da virgole di tutte le autorizzazioni che l'utente ha concesso all'app al momento dell'accesso. Può essere combinato con altri valori response_type
. Se combinato con token
, i dati della risposta vengono inclusi come un frammento di URL; in caso contrario, vengono inclusi come un parametro URL. scope
. Una lista separata da virgole o spazi delle autorizzazioni da richiedere alla persona che usa l'app.Se stai creando Facebook Login per un'app Windows, puoi usare l'identificatore di sicurezza del pacchetto come redirect_uri
. Attiva la finestra di dialogo Accedi chiamando WebAuthenticationBroker.AuthenticateAsync
e usa il relativo endpoint come requestUri. Ecco un esempio in JavaScript:
var requestUri = new Windows.Foundation.Uri(
"https://www.facebook.com/v21.0
/dialog/oauth?
client_id={app-id}
&display=popup
&response_type=token
&redirect_uri=ms-app://{package-security-identifier}");
Windows.Security.Authentication.Web.WebAuthenticationBroker.authenticateAsync(
options,
requestUri)
.done(function (result) {
// Handle the response from the Login Dialog
}
);
In questo modo, l'app riavrà il flusso di controllo e riceverà un token d'accesso se l'azione è stata eseguita correttamente o un errore in caso contrario.
A questo punto del flusso di accesso, la persona visualizzerà la finestra di dialogo Accedi e potrà scegliere se concedere o meno all'app l'accesso ai dati.
Se la persona che utilizza l'app sceglie Ok nella finestra di dialogo Accedi, concederà l'accesso al profilo pubblico, alla lista degli amici e a tutte le autorizzazioni aggiuntive richieste dalla tua app.
In tutti i casi, il browser torna all'app e vengono inclusi i dati di risposta che indicano se la persona si è collegata oppure ha annullato l'operazione. Quando l'app utilizza il metodo di reindirizzamento descritto in precedenza, al parametro redirect_uri
restituito dalla tua app vengono aggiunti parametri o frammenti di URL (in base al valore response_type
), che devono essere acquisiti.
A causa delle diverse combinazioni di linguaggi del codice che è possibile utilizzare nelle app web, la nostra guida non mostra esempi specifici. Tuttavia, la maggior parte dei linguaggi moderni è in grado di eseguire il parsing dell'URL nel modo seguente:
Il linguaggio JavaScript lato client è in grado di acquisire i frammenti di URL (ad esempio jQuery BBQ), mentre i parametri URL possono essere acquisiti tramite codice lato client e lato server (ad esempio $_GET
in PHP, jQuery.deparam
in jQuery BBQ, querystring.parse
in Node.js oppure urlparse
in Python). Microsoft mette a disposizione una guida e un codice di esempio per le app Windows 8 che si connettono a un "fornitore online" (in questo caso, Facebook).
Quando una persona effettua l'accesso a un'app per computer, Facebook la reindirizza al parametro redirect_uri
descritto in precedenza, inserendo un token d'accesso e altri metadati (ad esempio, la scadenza del token) nel frammento di URI:
https://www.facebook.com/connect/login_success.html# access_token=ACCESS_TOKEN...
L'app deve essere in grado di individuare il reindirizzamento e di leggere il token d'accesso dell'URI tramite i meccanismi offerti dal sistema operativo e dal framework di sviluppo usato. In seguito, passa direttamente al passaggio Esame dei token d'accesso.
Se la persona che sta usando la tua app non accetta la finestra di dialogo Accedi e clicca su Annulla, viene reindirizzata a:
YOUR_REDIRECT_URI? error_reason=user_denied &error=access_denied &error_description=Permissions+error.
Consulta Gestione delle autorizzazioni mancanti per maggiori informazioni su quali operazioni deve eseguire l'app quando le persone rifiutano l'accesso.
Poiché il flusso di reindirizzamento prevede che i browser siano reindirizzati dalla finestra di dialogo Accedi agli URL nella tua app, a cui il traffico può accedere direttamente attraverso determinati frammenti o parametri. Se l'app li accetta come parametri validi, potrebbe usare questi dati per scopi potenzialmente dannosi. Pertanto, prima di generare un token d'accesso, l'app deve confermare che la persona che la sta usando sia la stessa a cui sono destinati i dati della risposta. Esistono diversi modi per confermare l'identità di una persona, a seconda del parametro response_type
ricevuto in precedenza:
code
, devi scambiarlo con un token d'accesso utilizzando un endpoint. Dal momento che usa la chiave segreta, la chiamata deve essere tra server (non inserire la chiave segreta in un codice lato client).token
, devi verificarlo. Devi effettuare una chiamata API a un endpoint di ispezione che indicherà per chi è stato generato il token e da quale app. Dal momento che la chiamata all'API richiede l'uso di un token d'accesso dell'app, non effettuarla da un client. Al contrario, effettua la chiamata da un server in cui puoi memorizzare la chiave segreta in modo sicuro.code
sia token
, devi eseguire entrambi i passaggi.Puoi anche generare un parametro state
personale e usarlo con la richiesta di accesso come protezione dagli attacchi CSRF (Cross-Site Request Forgery).
Per ottenere un token d'accesso, effettua una richiesta HTTP GET al seguente endpoint OAuth:
GET https://graph.facebook.com/v21.0
/oauth/access_token?
client_id={app-id}
&redirect_uri={redirect-uri}
&client_secret={app-secret}
&code={code-parameter}
Questo endpoint prevede i seguenti parametri necessari:
client_id
. L'ID della tua app.redirect_uri
. Questo argomento è necessario e deve corrispondere al parametro request_uri
originale, usato per avviare il processo di accesso OAuth.client_secret
. La chiave segreta unica mostrata nella Dashboard gestione app. Non includerla in un codice lato client o in binari che è possibile decompilare. È estremamente importante mantenerla segreta in quanto cuore di protezione dell'app e di tutte le persone che la usano.code
. Il parametro ricevuto dal reindirizzamento della finestra di dialogo Accedi descritto in precedenza.Nota: a partire dalla versione 2.3, questo endpoint restituisce una risposta JSON corretta. Se la chiamata non specifica una versione, il valore predefinito corrisponde alla versione meno recente disponibile.
Risposta
La risposta che riceverai da questo endpoint sarà in formato JSON e, se l'azione è stata eseguita correttamente, sarà:
{ "access_token": {access-token}, "token_type": {type}, "expires_in": {seconds-til-expiration} }
In caso contrario, riceverai un messaggio di errore esplicativo.
Indipendentemente dal fatto che l'app usi o meno code
o token
come response_type
dalla finestra di dialogo Accedi, riceverà un token d'accesso. Puoi eseguire controlli automatici sui token tramite un endpoint API Graph:
GET graph.facebook.com/debug_token? input_token={token-to-inspect} &access_token={app-token-or-admin-token}
Questo endpoint accetta i seguenti parametri:
input_token
. Il token da esaminare.access_token
Un token d'accesso dell'app o un token d'accesso per uno sviluppatore dell'app.La risposta alla chiamata all'API è un array JSON contenente dati sul token esaminato. Ad esempio:
{ "data": { "app_id": 138483919580948, "type": "USER", "application": "Social Cafe", "expires_at": 1352419328, "is_valid": true, "issued_at": 1347235328, "metadata": { "sso": "iphone-safari" }, "scopes": [ "email", "publish_actions" ], "user_id": "1207059" } }
I campi app_id
e user_id
aiutano l'app a verificare che il token d'accesso sia valido sia per l'utente sia per l'app stessa. Per una descrizione completa degli altri campi, consulta la guida su come ottenere informazioni sui token d'accesso.
Puoi chiamare il segmento /me/permissions
per recuperare una lista delle autorizzazioni concesse o rifiutate da un determinato utente. La tua app può usare questo metodo per controllare quali autorizzazioni richieste non può usare per un utente specifico.
Facebook Login consente alle persone di rifiutare la condivisione di alcune autorizzazioni con la tua app. La finestra di dialogo Accedi contiene una schermata simile alla seguente:
L'autorizzazione public_profile
è sempre necessaria e visualizzata in grigio poiché non è possibile disabilitarla.
Tuttavia, se l'utente disabilitasse user_likes
("Mi piace") in questo esempio, verificando /me/permissions
per le autorizzazioni concesse, il risultato sarebbe il seguente:
{ "data": [ { "permission":"public_profile", "status":"granted" }, { "permission":"user_likes", "status":"declined" } ] }
Tieni presente che user_likes
non è stata concessa.
Puoi chiedere di nuovo alla persona di concedere le autorizzazioni rifiutate all'app. Mostra prima una schermata in cui spieghi il motivo per cui dovrebbe concedere una determinata autorizzazione. Tuttavia chiamando la finestra di dialogo Accedi come descritto in precedenza, l'autorizzazione non sarà richiesta.
Questo poiché, una volta che la persona ha rifiutato un'autorizzazione, la finestra di dialogo Accedi non la richiede a meno che non sia tu a specificarlo.
Puoi farlo aggiungendo il parametro auth_type=rerequest
all'URL della finestra di dialogo Accedi:
https://www.facebook.com/v21.0
/dialog/oauth?
client_id={app-id}
&redirect_uri={redirect-uri}
&auth_type=rerequest
scope=email
In questo modo, la finestra di dialogo Accedi chiederà nuovamente l'autorizzazione rifiutata.
A questo punto del flusso, la persona è autenticata e ha effettuato l'accesso. L'app può effettuare chiamate API per suo conto. Prima, però, è necessario memorizzare il token d'accesso e lo stato d'accesso della persona che utilizza l'app.
Quando l'app ha ricevuto il token d'accesso tramite il passaggio precedente, deve memorizzarlo e renderlo disponibile per ogni chiamata API. Non esiste un processo specifico, ma in generale, se stai creando un'app web è preferibile aggiungere il token come variabile della sessione per collegarla a una determinata persona; se invece stai creando un'app nativa per computer o mobile usa il datastore che hai a disposizione. Inoltre, l'app deve memorizzare il token e lo user_id
in un database per poterlo identificare.
Consulta la nostra nota sulle dimensioni nel documento relativo ai token d'accesso.
Di nuovo, la tua app deve memorizzare lo stato d'accesso della persona per evitare di dover effettuare ulteriori chiamate alla finestra di dialogo Accedi. Indipendentemente dalla procedura che sceglierai, adatta il controllo dello stato d'accesso.
Puoi disconnettere le persone dalla tua app annullando l'indicatore dello stato d'accesso che hai aggiunto, ad esempio eliminando la sessione che indica se la persona ha effettuato l'accesso. Inoltre, devi rimuovere il token d'accesso memorizzato.
Disconnettere le persone non è come revocare un'autorizzazione di accesso (rimuovendo l'autenticazione concessa in precedenza), operazione che è possibile eseguire separatamente. Pertanto, fai in modo che l'app non reindirizzi automaticamente le persone disconnesse alla finestra di dialogo Accedi.
Le persone possono disinstallare le app tramite Facebook.com senza interagire con queste ultime. Per aiutarti a rilevare quando si verifica tale situazione, ti consentiamo di fornire un URL di callback per la rimozione dell'autorizzazione, che sarà chiamato ogni volta.
Puoi abilitare una callback per la rimozione dell'autorizzazione tramite la Dashboard gestione app.
Le persone possono richiedere a un'app di eliminare tutte le informazioni su di loro ricevute da Facebook. Per rispondere a queste richieste, consulta Callback di richiesta di eliminazione dati.