Login em TVs e dispositivos de entrada limitada

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Você pode permitir que os usuários façam login no app com as Contas do Google deles em dispositivos com recursos de entrada limitados, como TVs conectadas à Internet.

O app exibe um código curto e o URL de login ao usuário. Em seguida, o usuário abre o URL de login em um navegador da Web, insere o código e concede permissão ao app para acessar as informações de login do usuário. Por fim, o app recebe a confirmação e o usuário está conectado.

Para usar esse fluxo de login, o app precisa ser executado em um dispositivo que atenda aos seguintes critérios:

  • O dispositivo precisa ser capaz de exibir um URL de 40 caracteres e um código de usuário de 15 caracteres, além de instruções para o usuário.
  • O dispositivo precisa estar conectado à Internet.

Receber um ID e uma chave secreta do cliente

Seu app precisa de um ID e de uma chave secreta do cliente do OAuth 2.0 para fazer solicitações aos endpoints de login do Google.

Para localizar o ID do cliente e a chave secreta do cliente do projeto, faça o seguinte:

  1. Selecione uma credencial do OAuth 2.0 existente ou abra a página "Credenciais".
  2. Se você ainda não tiver feito isso, crie as credenciais do OAuth 2.0 do seu projeto clicando em Criar credenciais e ID do cliente OAuth e fornecendo as informações necessárias para criá-las.
  3. Procure o ID do cliente na seção IDs do cliente do OAuth 2.0. Para mais detalhes, clique no ID do cliente.

Se você estiver criando um novo ID do cliente, selecione o tipo de aplicativo TVs and Limited Input Devices.

Receber o código de usuário e o URL de verificação

Depois que um usuário solicita o login usando uma Conta do Google, você recebe um código de usuário e um URL de verificação enviando uma solicitação HTTP POST para o endpoint do dispositivo OAuth 2.0, https://oauth2.googleapis.com/device/code. Inclua o ID do cliente e uma lista dos escopos necessários para a solicitação. Se você quiser fazer login de usuários apenas com as Contas do Google deles, solicite apenas os escopos profile e email. Caso queira solicitar permissão para chamar uma API compatível em nome dos usuários, solicite os escopos necessários e profile.

Veja a seguir um exemplo de solicitação de código de usuário:

POST /device/code HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=CLIENT_ID&scope=email%20profile

Usando curl:

curl -d "client_id=CLIENT_ID&scope=email profile" https://oauth2.googleapis.com/device/code

A resposta é retornada como um objeto JSON:

{
  "device_code" : "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
  "user_code" : "GQVQ-JKEC",
  "verification_url" : "https://www.google.com/device",
  "expires_in" : 1800,
  "interval" : 5
}

O app exibe os valores user_code e verification_url para o usuário e, ao mesmo tempo, pesquisa o endpoint de login no interval especificado até que o usuário faça login ou até que o tempo especificado por expires_in tenha passado.

Exibir o código de usuário e o URL de verificação

Depois de receber um código de usuário e um URL de verificação do endpoint do dispositivo, exiba-os e instrua o usuário a abrir o URL e inserir o código do usuário.

Os valores de verification_url e user_code estão sujeitos a mudanças. Projete a IU de uma maneira que possa processar os seguintes limites:

  • user_code precisa ser exibido em um campo grande o suficiente para processar 15 caracteres de tamanho W.
  • verification_url precisa ser exibido em um campo amplo o suficiente para processar uma string de URL com 40 caracteres.

As duas strings podem conter qualquer caractere imprimível do conjunto de caracteres ASCII dos EUA.

Ao exibir a string user_code, não a modifique de nenhuma maneira (como alterar a capitalização ou inserir outros caracteres de formatação), porque seu app poderá ser corrompido se o formato do código mudar no futuro.

É possível modificar a string verification_url removendo o esquema do URL para fins de exibição, se quiser. Se fizer isso, verifique se o app pode processar as variantes "http" e "https". Caso contrário, não modifique a string verification_url.

Ao navegar até o URL de verificação, o usuário verá uma página semelhante a esta:

Conectar um dispositivo digitando um código

Depois que o usuário digita o código, o site de login do Google exibe uma tela de consentimento semelhante a esta:

Exemplo de tela de consentimento para um cliente de dispositivo

Se o usuário clicar em Permitir, o app poderá receber um token de ID para identificá-lo, um token de acesso para chamar as APIs do Google e um token de atualização para adquirir novos tokens.

Receber um token de código e atualizar o token

Depois que o app exibir o código do usuário e o URL de verificação, comece a pesquisar o endpoint do token (https://oauth2.googleapis.com/token) com o código de dispositivo que você recebeu do endpoint do dispositivo. Pesquise o endpoint do token no intervalo, em segundos, especificado pelo valor interval.

Veja a seguir um exemplo de solicitação:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0

Usando curl:

curl -d "client_id=CLIENT_ID&client_secret=CLIENT_SECRET&code=DEVICE_CODE&grant_type=http://oauth.net/grant_type/device/1.0" https://oauth2.googleapis.com/token

Se o usuário ainda não tiver aprovado a solicitação, a resposta será a seguinte:

{
  "error" : "authorization_pending"
}

O app precisa repetir essas solicitações a uma taxa que não exceda o valor de interval. Se seu app pesquisar muito rapidamente, a resposta será a seguinte:

{
  "error" : "slow_down"
}

Depois que o usuário fizer login e conceder ao app acesso aos escopos solicitados, a resposta à próxima solicitação do app incluirá um token de ID, um token de acesso e um token de atualização:

{
  "access_token" : "ya29.AHES6ZSuY8f6WFLswSv0HZLP2J4cCvFSj-8GiZM0Pr6cgXU",
  "token_type" : "Bearer",
  "expires_in" : 3600,
  "refresh_token" : "1/551G1yXUqgkDGnkfFk6ZbjMMMDIMxo3JFc8lY8CAR-Q",
  "id_token": "eyJhbGciOiJSUzI..."
}

Ao receber essa resposta, seu app pode decodificar o token de ID para receber informações básicas de perfil sobre o usuário conectado ou enviar o token de ID para o servidor de back-end do seu app para autenticar com segurança no servidor. Além disso, o app pode usar o token de acesso para chamar as APIs do Google autorizadas pelo usuário.

Os tokens de acesso e código têm ciclos de vida limitados. Para manter o usuário conectado além dos ciclos de vida útil dos tokens, armazene o token de atualização e use-o para solicitar novos tokens.

Receber informações do perfil de usuário com o token de ID

Para conseguir informações de perfil sobre o usuário conectado, decodifique o token de ID com qualquer biblioteca de decodificação de JWT. Por exemplo, usando a biblioteca JavaScript jwt-decode do Auth0:

var user_profile = jwt_decode(id_token);

// The "sub" field is available on all ID tokens. This value is unique for each
// Google account and can be used to identify the user. (But do not send this
// value to your server; instead, send the whole ID token so its authenticity
// can be verified.)
var user_id = user_profile["sub"];

// These values are available when you request the "profile" and "email" scopes.
var user_email = user_profile["email"];
var email_verified = user_profile["email_verified"];
var user_name = user_profile["name"];
var user_photo_url = user_profile["picture"];
var user_given_name = user_profile["given_name"];
var user_family_name = user_profile["family_name"];
var user_locale = user_profile["locale"];

Mais informações