Passare da ClientLogin a OAuth 2.0

Ikai Lan, YouTube Developer Relations – June 2013

Le API di YouTube utilizzano OAuth 2.0 per autorizzare le richieste degli utenti. Ci viene spesso chiesto se in futuro aggiungeremo il supporto per l'autenticazione ClientLogin o qualcosa di simile nelle API di YouTube. Tuttavia, abbiamo ritirato ufficialmente ClientLogin il 20 aprile 2012 e non prevediamo di aggiungere un meccanismo di questo tipo.

Esistono numerosi motivi per cui riteniamo che supportare vari flussi di autorizzazione OAuth 2.0 sia meglio per gli utenti di YouTube rispetto a ClientLogin. Questi flussi supportano casi d'uso per applicazioni desktop, applicazioni solo web, applicazioni mobile e persino applicazioni eseguite su dispositivi come le televisioni che non dispongono di meccanismi di input sofisticati, cosa difficile da fare utilizzando ClientLogin. Inoltre, abbiamo scoperto che ClientLogin causa più problemi post-lancio per molti sviluppatori.

Utilizzo di OAuth 2.0 per script autonomi lato server

Molti sviluppatori utilizzano ClientLogin per autorizzare script della riga di comando eseguiti su server senza browser. Con OAuth 2.0, è quasi sempre coinvolto un browser, tranne quando lavori su un'app per Android che utilizza Google Play Services per recuperare i token tramite GoogleAuthUtil.

In un flusso solo web, un sito web che vuole effettuare chiamate API autenticate per conto di un utente deve reindirizzare l'utente a una pagina di autenticazione google.com che spiega a cosa sta cercando di accedere l'applicazione. L'applicazione web riceve quindi un token, che utilizza per effettuare chiamate API. L'utente può quindi revocare l'accesso dell'applicazione in qualsiasi momento utilizzando la pagina connected apps and sites.

I nostri esempi di codice Python mostrano come gli script della riga di comando possono avviare un browser ed effettuare chiamate API da una finestra del terminale, creare un server locale per ascoltare il codice dopo il reindirizzamento dell'autorizzazione e salvare automaticamente un token per le chiamate API future. Di seguito è riportato un video che mostra questa funzionalità in azione:

Il token utilizzato è una stringa ASCII. Se si tratta di un token offline, è portatile. Utilizzando il token recuperato, potrai eseguire lo script sul tuo computer, quindi copiare e utilizzare il codice su un server remoto senza GUI, a condizione che il codice crei un'istanza di un client OAuth 2.0 con lo stesso ID client e lo stesso client secret. Oltre a Python, le librerie client dell'API di Google per altri linguaggi di programmazione forniscono anche metodi helper per la gestione dei token, che possono essere condivisi tra i client e persino utilizzati direttamente nelle librerie HTTP di livello inferiore in un'intestazione client o come parametro URL.

Alcuni esempi di script lato server che utilizzano token offline:

  • Un daemon che monitora una directory per individuare nuovi video da caricare automaticamente su YouTube
  • Un cron job che aggiorna le playlist ogni giorno con nuovi contenuti
  • Uno script che monitora i dati dei video tramite l'API di YouTube Analytics e invia una notifica ai gestori del canale quando si verificano determinati eventi, ad esempio quando il tempo di visualizzazione aggregato supera un limite. Tieni presente che in questo caso OAuth 2.0 è l'unico metodo di autorizzazione supportato perché l'API Analytics non supporta ClientLogin.

La sezione sui token di accesso di lunga durata fornisce maggiori dettagli su come generare i token offline che possono essere utilizzati per i processi lato server.

Best practice per l'ID client e il client secret

Qualsiasi codice che condivide la stessa coppia di ID client e secret può utilizzare gli stessi token di accesso. È consigliabile limitare l'accesso all'ID client e ai client secret al codice eseguito su macchine e dispositivi all'interno della tua organizzazione.

Non includere l'ID client e il client secret nel codice delle tue app mobile native. Tutti gli sviluppatori che eseguono l'autenticazione OAuth 2.0 da un dispositivo mobile devono utilizzare l'ID client "Applicazione installata", che richiede informazioni aggiuntive per verificare che la richiesta provenga solo da un'applicazione rilasciata dal tuo team.

Sui dispositivi Android, anziché utilizzare un ID client e un client secret, la tua applicazione viene identificata utilizzando una combinazione del nome del pacchetto e di un hash del certificato di firma. Sui dispositivi iOS vengono utilizzati l'ID pacchetto e l'ID App Store. La documentazione ufficiale sul recupero di queste informazioni è disponibile nella pagina di assistenza di Google Cloud console.

I service account non funzionano con l'API YouTube

I service account non funzionano per le chiamate all'API YouTube Data perché richiedono un canale YouTube associato e non puoi associare canali nuovi o esistenti ai service account. Se utilizzi un service account per chiamare l'API YouTube Data, il server API restituisce un errore con il tipo di errore impostato su unauthorized e il motivo impostato su youtubeSignupRequired.

Accesso offline/a lungo termine all'API YouTube

OAuth 2.0 ha token di breve e lunga durata. Per le operazioni una tantum, i token di accesso di breve durata sono l'opzione migliore. Questi token scadono poco dopo essere stati concessi. Per i job di lunga durata, ti consigliamo di acquisire un token di aggiornamento, che viene utilizzato per recuperare token di accesso di breve durata.

Per assicurarti che la tua applicazione riceva un token di aggiornamento di lunga durata e non un token di accesso di breve durata, utilizza il flusso "Applicazione installata" quando crei un ID client e seleziona Other per il valore "Tipo di applicazione installata":

Per questo caso d'uso, ti consigliamo di utilizzare il flusso "Applicazione installata". Se hai bisogno di un accesso a lungo termine all'API YouTube in un'applicazione web, puoi recuperarne uno impostando il parametro access_type su offline e il parametro approval_prompt su force nella richiesta di autorizzazione iniziale o nella configurazione del client. Alcune librerie client gestiranno il recupero e l'aggiornamento dei token di accesso. Se ti interessa scrivere il tuo codice di autorizzazione personalizzato, abbiamo pubblicato un post sul blog Google Code che puoi utilizzare come base per il tuo codice.

Utilizzo di OAuth 2.0 con smartphone, tablet e altri dispositivi

Quando scrivono applicazioni per Android, gli sviluppatori possono sfruttare Google Play services per gestire i dettagli di autorizzazione. Google Play Services offre un flusso di autorizzazione standard per tutte le API di Google, incluse le API per la piattaforma YouTube. Questo approccio offrirà un'esperienza utente di gran lunga superiore per gli utenti della tua app per Android rispetto a un'autenticazione personalizzata che utilizza ClientLogin.

Sui dispositivi iOS, Google offre due opzioni:

Per i dispositivi che devono fungere da "secondo schermo" o per dispositivi come le televisioni senza meccanismi di input facili da usare, l'approccio preferito è OAuth 2.0 per i dispositivi. OAuth 2.0 per i dispositivi funziona presentando un codice univoco per un utente quando è richiesta un'autorizzazione. A questo punto, agli utenti viene chiesto di andare su http://google.com/device su un altro dispositivo, ad esempio un laptop o uno smartphone, e inserire il codice univoco. L'applicazione mostra una schermata simile a questa:

Mentre l'utente inserisce il codice su un altro dispositivo, l'applicazione esegue periodicamente il polling per verificare se il codice è stato inserito. Una volta fatto, recupera un token per effettuare chiamate API. Per vedere questa funzionalità in azione, guarda la demo, che può essere eseguita su qualsiasi dispositivo con accesso al web. L'API stessa è indipendente dalla piattaforma, il che la rende utile per i dispositivi che non dispongono di funzionalità di rendering web. Abbiamo pubblicato un codice campione in Python per la demo da utilizzare come riferimento.

Riepilogo

L'autorizzazione OAuth 2.0 offre flessibilità agli sviluppatori che richiedono l'autorizzazione di YouTube. Gli sviluppatori che hanno familiarità con ClientLogin potrebbero scoprire che la configurazione delle loro applicazioni per l'utilizzo di OAuth 2.0 richiede un po' più di lavoro per iniziare, ma una volta eseguito il porting, le applicazioni OAuth 2.0 offrono maggiore flessibilità, sicurezza e usabilità su più piattaforme per gli utenti finali.

Se hai altre domande su OAuth 2.0 o su uno degli esempi in questo articolo, non esitare a farle con il tag youtube-api su Stack Overflow.