Login do Google para TVs e dispositivos

Você pode permitir que os usuários façam login em seu aplicativo com suas contas do Google em dispositivos com recursos de entrada limitados, como TVs conectadas à Internet.

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

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

  • O dispositivo deve ser capaz de exibir um URL de 40 caracteres e um código de usuário de 15 caracteres, junto com as instruções para o usuário.
  • O dispositivo deve estar conectado à Internet.

Obtenha um ID e segredo do cliente

Seu aplicativo precisa de um ID do cliente OAuth 2.0 e segredo do cliente para fazer solicitações aos endpoints de login do Google.

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

  1. Selecione uma credencial OAuth 2.0 existente ou abra a página Credenciais .
  2. Caso ainda não tenha feito isso, crie as credenciais OAuth 2.0 do seu projeto clicando em Criar credenciais> ID do cliente OAuth e fornecendo as informações necessárias para criar as credenciais.
  3. Procure o ID do cliente na seção IDs do cliente OAuth 2.0 . Para obter detalhes, clique no ID do cliente.

Se você estiver criando um novo ID de cliente, selecione o tipo de aplicativo TVs e Dispositivos de entrada limitada .

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

Quando um usuário solicita o login usando uma Conta do Google, você obtém 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 seu ID de cliente e uma lista dos escopos de que você precisa com a solicitação. Se você deseja apenas fazer login de usuários com suas contas do Google, solicite apenas os escopos de profile e e- email ; ou, se desejar solicitar permissão para chamar uma API com suporte em nome dos usuários, solicite os escopos necessários, além dos escopos de profile e e- email .

A seguir está um exemplo de solicitação de um 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
}

Seu aplicativo 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 o tempo especificado por expires_in tenha passado.

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

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

Os valores de verification_url e user_code estão sujeitos a alterações. Projete sua IU de uma maneira que possa lidar com os seguintes limites:

  • user_code deve ser exibido em um campo largo o suficiente para lidar com 15 caracteres de tamanho W
  • verification_url deve ser exibido em um campo largo o suficiente para lidar com uma string de URL com 40 caracteres.

Ambas as strings podem conter qualquer caractere imprimível do conjunto de caracteres US-ASCII.

Ao exibir a string user_code , não modifique a string de nenhuma forma (como alterar maiúsculas e minúsculas ou inserir outros caracteres de formatação), porque seu aplicativo pode falhar se o formato do código mudar no futuro.

Você pode modificar a string verification_url removendo o esquema do URL para fins de exibição, se desejar. Se você fizer isso, certifique-se de que seu aplicativo pode lidar com as variantes "http" e "https". De outra forma, não modifique a string verification_url .

Quando o usuário navega até o URL de verificação, ele vê uma página semelhante à seguinte:

Conecte um dispositivo digitando um código

Depois que o usuário insere o código de usuário, o site de login do Google apresenta uma tela de consentimento semelhante à seguinte:

Exemplo de tela de consentimento para um cliente de dispositivo

Se o usuário clicar em Permitir , seu aplicativo poderá obter um token de ID para identificar o usuário, um token de acesso para chamar APIs do Google e um token de atualização para adquirir novos tokens.

Obtenha um token de ID e atualize o token

Depois que seu aplicativo 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 do dispositivo que você recebeu do endpoint do dispositivo. Pesquise o terminal de token no intervalo, em segundos, especificado pelo valor do interval .

A seguir está 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 aprovou a solicitação, a resposta é a seguinte:

{
  "error" : "authorization_pending"
}

Seu aplicativo deve repetir essas solicitações a uma taxa que não exceda o valor do interval . Se o seu aplicativo pesquisar muito rapidamente, a resposta é a seguinte:

{
  "error" : "slow_down"
}

Depois que o usuário faz login e concede ao aplicativo acesso aos escopos solicitados, a resposta à próxima solicitação do aplicativo inclui 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..."
}

Após o recebimento dessa resposta, seu aplicativo pode decodificar o token de ID para obter 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 aplicativo para autenticação segura no servidor. Além disso, seu aplicativo pode usar o token de acesso para chamar as APIs do Google que o usuário autorizou.

ID e tokens de acesso têm tempos de vida limitados. Para manter o usuário conectado além da duração dos tokens, armazene o token de atualização e use-o para solicitar novos tokens .

Obtenha informações de perfil de usuário do token de ID

Você pode obter informações de perfil sobre o usuário conectado decodificando o token de ID com qualquer biblioteca de decodificação JWT . Por exemplo, usando a biblioteca JavaScript Auth0 jwt-decode :

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