Migrar do ClientLogin para o OAuth 2.0

Ikai Lan, YouTube Developer Relations – June 2013

As APIs do YouTube usam o OAuth 2.0 para autorizar as solicitações dos usuários. Frequentemente nos perguntam se vamos adicionar suporte à autenticação de ClientLogin ou algo semelhante nas APIs do YouTube daqui para frente. No entanto, o uso oficial do ClientLogin foi suspenso em 20 de abril de 2012, e não temos planos de adicionar esse mecanismo.

Há inúmeras razões pelas quais acreditamos que apoiar vários fluxos de autorização do OAuth 2.0 é melhor para os usuários do YouTube do que o ClientLogin. Esses fluxos oferecem suporte a casos de uso de apps para computador, somente Web, nativos e até mesmo executados em dispositivos como televisões que não têm mecanismos de entrada sofisticados, algo difícil de fazer usando o ClientLogin. Além disso, descobrimos que o ClientLogin causa mais dor de cabeça após o lançamento para muitos desenvolvedores, e alguns deles são descritos na postagem do blog, ClientLogin #FAIL.

Uso de scripts autônomos do OAuth 2.0 para servidor

Muitos desenvolvedores usam o ClientLogin para autorizar scripts de linha de comando executados em servidores sem um navegador. Com o OAuth 2.0, sempre há um navegador envolvido, exceto quando você está trabalhando em um aplicativo Android que usa Google Play Services para buscar tokens via GoogleAuthUtil..

Em um fluxo somente para Web, um site que quer fazer chamadas de API autenticadas em nome de um usuário precisa redirecionar o usuário para uma página de autenticação google.com que explique o que o aplicativo está tentando acessar. Em seguida, o aplicativo da Web recebe um token, usado para fazer chamadas de API. O usuário pode revogar o acesso do aplicativo a qualquer momento usando a página connected apps and sites.

Nossos exemplos de código Python demonstram como os scripts de linha de comando podem iniciar um navegador e fazer chamadas de API de uma janela de terminal, criar um servidor local para ouvir o código após o redirecionamento de autorização e salvar automaticamente um token para futuras chamadas de API. Você encontra um vídeo disso em ação abaixo:

O token usado é uma string ASCII. Se for um token offline, ele será portátil. Usando o token recuperado, você poderá executar o script em seu desktop e, em seguida, copiar e usar o código em um servidor remoto sem uma GUI, desde que o código instancie um cliente OAuth 2.0 com o mesmo ID e o mesmo segredo do cliente. Além do Python, as bibliotecas de cliente da API do Google para outras linguagens de programação também oferecem métodos auxiliares para gerenciar tokens, que podem ser compartilhados entre clientes e até mesmo usados em bibliotecas HTTP de nível inferior diretamente em um cabeçalho de cliente ou como um parâmetro de URL.

Alguns exemplos de scripts do lado do servidor que usam tokens off-line:

  • Um daemon que monitora um diretório para novos vídeos para fazer upload automaticamente para o YouTube
  • Uma tarefa cron que atualiza listas de reprodução diariamente com novos conteúdos
  • Um script que monitora dados de vídeo através da API do YouTube Analytics e notifica os gerentes de canal quando determinados eventos ocorrem, como o tempo de exibição agregado superior a um limite. Observe que, neste caso, OAuth 2.0 é o único método de autorização suportado porque a API do Analytics não suporta o ClientLogin.

A seção sobre tokens de acesso de longa duração fornece mais detalhes sobre como gerar os tokens off-line que podem ser usados para os processos do lado do servidor.

ID do cliente e práticas secretas recomendadas ao cliente

Qualquer código que compartilha o mesmo ID do cliente e par secreto pode usar os mesmos tokens de acesso. É melhor restringir o acesso ao ID do cliente e aos segredos do cliente para o código que é executado em máquinas e dispositivos em sua organização.

Não inclua seu ID de cliente e segredo do cliente como parte de seu código de aplicativo móvel nativo. Todos os desenvolvedores que fazem a autenticação com o OAuth 2.0 a partir de um dispositivo móvel devem fazer uso do ID do cliente do "Aplicativo instalado", que solicita informações adicionais para verificar se a solicitação está vindo apenas de um aplicativo lançado por sua equipe.

Em dispositivos Android, em vez de usar um ID do cliente e o segredo do cliente, o aplicativo é identificado com uma combinação do nome do pacote e um hash de certificado de assinatura. Em dispositivos iOS, são usados o ID pacote e o ID da loja do aplicativo. A documentação oficial sobre como recuperar essas informações pode ser encontrada na página de ajuda do Google API Console.

Contas de serviços não funcionam com a API do YouTube

As contas de serviço não funcionam para chamadas da API YouTube Data porque elas exigem um canal do YouTube associado, e não é possível associar canais novos ou atuais a contas de serviço. Se você usar uma conta de serviço para chamar a API YouTube Data, o servidor retornará um erro com o tipo de erro definido como unauthorized e o motivo definido como youtubeSignupRequired.

Acesso off-line/longa duração para a API do YouTube

O OAuth 2.0 possui tokens de curta e longa duração. Para operações pontuais, os tokens de acesso de curta duração são a melhor opção. Esses tokens expiram logo depois de serem concedidos. Para jobs de longa duração, convém adquirir um token de atualização, que é usado para buscar tokens de acesso de curta duração.

Para garantir que seu aplicativo receba um token de atualização de longa duração e não um token de acesso de curta duração, use o fluxo "Aplicativo instalado" ao criar um ID do cliente e selecione Other como o valor de "Tipo de aplicativo instalado":

É recomendado que você use o fluxo "Aplicativo instalado" para este caso de uso. Se você precisar de acesso de longa duração à API YouTube em um app da Web, poderá recuperar um deles definindo o parâmetro access_type como offline e o parâmetro approval_prompt como force na solicitação de autorização inicial ou na configuração do cliente. Algumas bibliotecas de cliente irão gerenciar a busca e atualização de tokens de acesso de atualização. Se você tiver interesse em escrever seu próprio código de autorização personalizado, publicamos uma postagem no blog do Google Code (link em inglês), que você pode usar como base para seu código.

Uso do OAuth 2.0 com telefones, tablets e outros dispositivos

Ao criar apps Android, os desenvolvedores podem aproveitar o Google Play services para processar os detalhes de autorização. O Google Play Services oferece um fluxo de autorização padrão para todas as APIs do Google, incluindo APIs para a plataforma do YouTube. Essa abordagem vai fornecer uma experiência muito melhor para os usuários do seu aplicativo Android do que uma autenticação personalizada que usa ClientLogin.

Em dispositivos iOS, o Google oferece duas opções:

Para dispositivos que atuam como dispositivos de "segunda tela" ou dispositivos como TVs sem mecanismos de entrada fáceis de usar, o OAuth 2.0 para dispositivos é a abordagem preferida. O OAuth 2.0 para dispositivos funciona através da apresentação de um código exclusivo para um usuário quando uma solicitação de autorização é necessária. Nesse momento, os usuários precisam navegar até o http://google.com/device em outro dispositivo, como um laptop ou smartphone, e digitar o código exclusivo. O aplicativo exibe uma tela parecida com esta:

Enquanto o usuário está digitando o código em outro dispositivo, o aplicativo monitora periodicamente para ver se o código foi inserido. Depois de inserido, ele recupera um token para fazer chamadas de API. Para ver isso em ação, confira o demo, que pode ser executado em qualquer dispositivo habilitado para Web. A API em si é independente de plataforma, o que a torna útil para dispositivos que não possuem recursos de renderização na Web. Publicamos o exemplo de código em Python para que a demonstração seja usada como referência.

Resumo

A autorização com o OAuth 2.0 fornece flexibilidade para desenvolvedores que requerem autorização do YouTube. Desenvolvedores familiarizados com ClientLogin podem achar que configurar seus aplicativos para usar o OAuth 2.0 requer um pouco mais de trabalho no início, mas depois de portado, os aplicativos do OAuth 2.0 oferecem mais flexibilidade, segurança e usabilidade em várias plataformas para os usuários finais.

Se você tiver mais dúvidas sobre o OAuth 2.0 ou qualquer um dos exemplos deste artigo, fique à vontade para perguntar com a tag youtube-api no StackOverflow.