Migrar do Google Identity Toolkit para o Firebase Authentication

A versão mais recente do Google Identity Toolkit foi lançada como Firebase Authentication. A partir de agora, o trabalho de recursos no Identity Toolkit será congelado, e todo o novo desenvolvimento de recursos será feito no Firebase Authentication. Incentivamos os desenvolvedores do Identity Toolkit a migrar para o Firebase Authentication assim que for prático para os aplicativos deles. No entanto, o Identity Toolkit continua funcionando e não será descontinuado sem um anúncio adicional.

Novos recursos

O Firebase Authentication já tem algumas melhorias significativas de recursos em relação ao Google Identity Toolkit:

  • Acesso a todo o Firebase

    O Firebase é uma plataforma móvel que ajuda a desenvolver apps de alta qualidade, ampliar sua base de usuários e lucrar mais. O Firebase é composto por recursos complementares que podem ser combinados para atender às suas necessidades e inclui infraestrutura para: análise de dispositivos móveis, Cloud Messaging, Realtime Database, armazenamento de arquivos, hospedagem estática, configuração remota, relatórios de falhas em dispositivos móveis e testes do Android.

  • Interfaces atualizadas

    Reconstruímos completamente os fluxos de interface com base na pesquisa de UX mais recente do Google. Isso inclui recuperação de senha, vinculação de contas, fluxos de desambiguação de contas novas/existentes que geralmente levam muito tempo para serem codificados e depurados. Ele integra o Smart Lock para senhas no Android, que melhorou significativamente a conversão de login e inscrição para apps participantes. Ele também oferece suporte a modificações de tema fáceis para corresponder ao seu aplicativo e, para máxima personalização, as versões do Android e do iOS foram de código aberto.

  • Configuração simplificada do servidor

    Facilitamos o uso do Firebase Authentication para desenvolvedores. Com o Identity Toolkit, percebemos que muitos desenvolvedores optaram por não implementar o fluxo de recuperação de e-mail, o que impossibilitou que os usuários recuperassem as contas se esquecessem a senha. O Firebase Authentication pode enviar mensagens de verificação de e-mail, redefinição de senha e senha alterada para o usuário, e o texto pode ser facilmente personalizado para os usuários. Além disso, não é mais necessário hospedar os widgets da interface para redirecionamentos de hospedagem e concluir operações de alteração de senha.

  • Novo Admin Console

    O Firebase tem um novo console para desenvolvedores e a seção "Autenticação" permite visualizar, modificar e excluir usuários. Isso pode ser muito útil para depurar os fluxos de login e inscrição. O console também permite configurar métodos de autenticação e personalizar modelos de e-mail.

  • Novos SDKs

    Todas as APIs de servidor do Identity Toolkit agora estão disponíveis nativamente com cada uma das nossas bibliotecas de cliente (Android, iOS, Web). Os desenvolvedores poderão fazer login e inscrever usuários antigos e novos, acessar propriedades do usuário, vincular, atualizar e excluir contas, redefinir senhas e muito mais sem estar vinculados a uma interface fixa. Se preferir, você pode criar manualmente todo o fluxo de login e a experiência na parte de cima dessa API.

  • Gerenciamento de sessões para apps para dispositivos móveis

    Com o Identity Toolkit, os apps criaram o próprio estado de sessão com base no evento de autenticação inicial do Identity Toolkit. O Firebase Auth usa um serviço de back-end que recebe um token de atualização, gerado pelo evento de autenticação, e o troca por tokens de acesso de uma hora para Android, iOS e JavaScript. Quando um usuário muda a senha, os tokens de atualização não podem mais gerar novos tokens de acesso, desativando o acesso até que o usuário faça a autenticação novamente nesse dispositivo.

  • Autenticação anônima e do GitHub

    O Firebase Authentication oferece suporte a dois novos tipos de autenticação: GitHub e anônima. O login anônimo pode ser usado para criar um ID de usuário exclusivo sem exigir que o usuário passe por um processo de login ou inscrição. Com um usuário anônimo, agora é possível fazer chamadas de API autenticadas, como faria com um usuário normal. Quando o usuário decide se inscrever em uma conta, toda a atividade é preservada com o mesmo ID de usuário. Isso é ótimo para situações como um carrinho de compras do lado do servidor ou qualquer aplicativo em que você queira envolver o usuário antes de enviá-lo por um fluxo de inscrição.

Diferenças de recursos

Alguns recursos do Identity Toolkit não estão disponíveis no momento no Firebase Authentication, enquanto outros foram reformulados e funcionam de maneira diferente. Você pode optar por não migrar imediatamente se esses recursos forem importantes para seu app. Em muitos casos, esses recursos podem não ser importantes para seu app ou pode haver alternativas fáceis que permitem continuar com a migração.

Diferenças do lado do servidor

O serviço principal do Identity Toolkit com as APIs REST subjacentes, a lógica de validação de contas e o banco de dados de usuários principal passaram apenas por pequenas atualizações. No entanto, alguns recursos e a maneira como você integra o Firebase Authentication ao seu serviço mudaram.

  • Provedores de identidade

    O PayPal e a AOL não são aceitos. Os usuários com contas desses IDPs ainda podem fazer login no aplicativo com o fluxo de recuperação de senha e configurar uma senha para a conta.

  • Bibliotecas de servidor

    No momento, há SDKs Admin do Firebase disponíveis para Java, Node.js, Python, Go e C#.

  • E-mails de gerenciamento de contas

    As mensagens de redefinição de senha, verificação de e-mail e alteração de e-mail podem ser realizadas pelo Firebase ou pelo próprio servidor de e-mail do desenvolvedor. No momento, os modelos de e-mail do Firebase oferecem apenas personalização limitada.

  • Confirmação de alteração de endereço de e-mail

    No Identity Toolkit, quando um usuário decide mudar o endereço de e-mail, ele envia um e-mail para o novo endereço com um link para continuar o fluxo de alteração de endereço de e-mail.

    O Firebase confirma a alteração do endereço de e-mail enviando um e-mail de revogação para o endereço de e-mail antigo com um link para reverter a alteração.

  • Implantação de IDP

    O Identity Toolkit tinha a capacidade de adicionar provedores de identidade ao sistema de login gradualmente, para que você pudesse testar o impacto nas solicitações de suporte. Esse recurso foi removido no Firebase Authentication.

Diferenças do lado do cliente

No Firebase, os recursos fornecidos pelo Google Identity Toolkit são divididos em dois componentes:

  • SDKs do Firebase Authentication

    No Firebase Authentication, a funcionalidade fornecida pela API REST do Identity Toolkit foi empacotada em SDKs de cliente disponíveis para Android, iOS e JavaScript. Você pode usar o SDK para fazer login e inscrever usuários, acessar informações de perfil do usuário, vincular, atualizar e excluir contas e redefinir senhas usando o SDK do cliente em vez de se comunicar com o serviço de back-end por chamadas REST.

  • Autenticação da FirebaseUI

    Todos os fluxos de interface que gerenciam login, inscrição, recuperação de senha e vinculação de contas foram reconstruídos usando os SDKs do Firebase Authentication. Eles estão disponíveis como SDKs de código aberto para iOS e Android para permitir que você personalize completamente os fluxos de maneiras que não são possíveis com o Identity Toolkit.

Outras diferenças incluem:

  • Sessões e migração

    Como as sessões são gerenciadas de maneira diferente no Identity Toolkit e no Firebase Authentication, as sessões atuais dos usuários serão encerradas após o upgrade do SDK, e os usuários precisarão fazer login novamente.

Antes de começar

Antes de migrar do Identity Toolkit para o Firebase Authentication, você precisa

  1. Abrir o console do Firebase, clicar em Importar projeto do Google e selecionar o projeto do Identity Toolkit.

  2. Clique em > Permissões para abrir a página "IAM e administrador".

  3. Abra a página Contas de serviço. Aqui, você pode conferir a conta de serviço que configurou anteriormente para o Identity Toolkit.

  4. Ao lado da conta de serviço, clique em > Criar chave. Em seguida, na caixa de diálogo Criar chave privada, defina o tipo de chave como JSON e clique em Criar. Um arquivo JSON contendo as credenciais da sua conta de serviço será baixado para você. Ele será necessário para inicializar o SDK na próxima etapa.

  5. Volte para o Console do Firebase. Na seção "Auth", abra a página Modelos de e-mail. Nessa página, personalize os modelos de e-mail do seu app.

    No Identity Toolkit, quando os usuários redefinem senhas, mudam endereços de e-mail e verificam o e-mail, é necessário receber um código OOB do servidor do Identity Toolkit e enviar o código aos usuários por e-mail. O Firebase envia e-mails com base nos modelos configurados, sem necessidade de outras ações.

  6. Opcional: se você precisar acessar os serviços do Firebase no servidor, instale o SDK do Firebase.

    1. Você pode instalar o módulo do Firebase Node.js com npm:

      $ npm init
      $ npm install --save firebase-admin
      
    2. No seu código, você pode acessar o Firebase usando:

      var admin = require('firebase-admin');
      var app = admin.initializeApp({
        credential: admin.credential.cert('path/to/serviceAccountCredentials.json')
      });
      

Em seguida, conclua as etapas de migração para a plataforma do seu app: Android, iOS, Web.

Servidores e JavaScript

Mudanças importantes

Há várias outras diferenças na implementação da Web do Firebase em relação ao Identity Toolkit.

  • Gerenciamento de sessões da Web

    Anteriormente, quando um usuário fazia a autenticação usando o widget do Identity Toolkit, um cookie era definido para o usuário, que era usado para inicializar a sessão. Esse cookie tinha uma vida útil de duas semanas e era usado para permitir que o usuário usasse o widget de gerenciamento de contas para mudar a senha e o endereço de e-mail. Alguns sites usavam esse cookie para autenticar todas as outras solicitações de página no site. Outros sites usavam o cookie para criar os próprios cookies pelo sistema de gerenciamento de cookies do framework.

    Os SDKs do cliente do Firebase agora gerenciam tokens de ID do Firebase e funcionam com o back-end do Firebase Authentication para manter a sessão atualizada. O back-end expira as sessões quando ocorrem mudanças importantes na conta (como alterações de senha do usuário). Os tokens de ID do Firebase não são definidos automaticamente como cookies no cliente da Web e têm apenas uma hora de vida útil. A menos que você queira sessões de apenas uma hora, os tokens de ID do Firebase não são adequados para serem usados como o cookie para validar todas as solicitações de página. Em vez disso, você precisará configurar um listener para quando o usuário fizer login, receber o token de ID do Firebase, validar o token e criar seu próprio cookie pelo sistema de gerenciamento de cookies do framework.

    Você precisará definir a vida útil da sessão do cookie com base nas necessidades de segurança do aplicativo.

  • Fluxo de login na Web

    Anteriormente, os usuários eram redirecionados para accountchooser.com quando o login era iniciado para saber qual identificador o usuário queria usar. O fluxo da interface do Firebase Auth agora começa com uma lista de métodos de login, incluindo uma opção de e-mail que vai para accountchooser.com na Web e usa a API hintRequest no Android. Além disso, os endereços de e-mail não são mais obrigatórios na interface do Firebase. Isso vai facilitar o suporte a usuários anônimos, usuários de autenticação personalizada ou usuários de provedores em que os endereços de e-mail não são obrigatórios.

  • Widget de gerenciamento de contas

    Esse widget fornece uma interface para que os usuários mudem endereços de e-mail, alterem senhas ou desvinculem as contas de provedores de identidade. No momento, ele está em desenvolvimento.

  • Botão/widget de login

    Widgets como o botão de login e o cartão de usuário não são mais fornecidos. Eles podem ser criados com muita facilidade usando a API Firebase Authentication.

  • Sem signOutUrl

    Você precisará chamar firebase.auth.signOut() e processar o callback.

  • Sem oobActionUrl

    O envio de e-mails agora é processado pelo Firebase e configurado no console do Firebase.

  • Personalização de CSS

    A FirebaseUI usa o estilo do Material Design Lite, que adiciona animações do Material Design dinamicamente.

Etapa 1: mudar o código do servidor

  1. Se o servidor depende do token do Identity Toolkit (válido por duas semanas) para gerenciar sessões de usuários da Web, é necessário converter o servidor para usar o próprio cookie de sessão.

    1. Implemente um endpoint para validar o token de ID do Firebase e definir o cookie de sessão para o usuário. O app cliente envia o token de ID do Firebase para esse endpoint.
    2. Se a solicitação recebida contiver seu próprio cookie de sessão, você poderá considerar o usuário autenticado. Caso contrário, trate a solicitação como não autenticada.
    3. Se você não quiser que nenhum dos usuários perca as sessões conectadas atuais, aguarde duas semanas para que todos os tokens do Identity Toolkit expirem ou faça a validação de token duplo para seu aplicativo da Web, conforme descrito abaixo na etapa 3.
  2. Em seguida, como os tokens do Firebase são diferentes dos tokens do Identity Toolkit, é necessário atualizar a lógica de validação de tokens. Instale o SDK do servidor do Firebase no servidor ou, se você usar uma linguagem indisponível pelo SDK do servidor do Firebase, baixe uma biblioteca de validação de token JWT para seu ambiente e valide o token corretamente.

  3. Ao fazer as atualizações acima pela primeira vez, você ainda pode ter caminhos de código que dependem de tokens do Identity Toolkit. Se você tiver aplicativos iOS ou Android, os usuários precisarão fazer upgrade para a nova versão do app para que os novos caminhos de código funcionem. Se você não quiser forçar os usuários a atualizar o app, adicione uma lógica de validação de servidor adicional que examine o token e determine se ele precisa usar o SDK do Firebase ou o SDK do Identity Toolkit para validar o token. Se você tiver apenas um aplicativo da Web, todas as novas solicitações de autenticação serão transferidas para o Firebase e, portanto, você só precisará usar os métodos de verificação de token do Firebase.

Consulte a referência da API da Web do Firebase.

Etapa 2: atualizar o HTML

  1. Adicione o código de inicialização do Firebase ao seu app:

    1. Abra seu projeto no Console do Firebase.
    2. Na página "Visão geral", clique em Adicionar app e em Adicionar o Firebase ao seu app da Web. Um snippet de código que inicializa o Firebase é exibido.
    3. Copie e cole o snippet de inicialização na sua página da Web.
  2. Adicione a autenticação da FirebaseUI ao seu app:

    <script src="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.js"></script>
    <link type="text/css" rel="stylesheet" href="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.css" />
    <!-- *******************************************************************************************
       * TODO(DEVELOPER): Paste the initialization snippet from:
       * Firebase Console > Overview > Add Firebase to your web app. *
       ***************************************************************************************** -->
    <script type="text/javascript">
      // FirebaseUI config.
      var uiConfig = {
        'signInSuccessUrl': '<url-to-redirect-to-on-success>',
        'signInOptions': [
          // Leave the lines as is for the providers you want to offer your users.
          firebase.auth.GoogleAuthProvider.PROVIDER_ID,
          firebase.auth.FacebookAuthProvider.PROVIDER_ID,
          firebase.auth.TwitterAuthProvider.PROVIDER_ID,
          firebase.auth.GithubAuthProvider.PROVIDER_ID,
          firebase.auth.EmailAuthProvider.PROVIDER_ID
        ],
        // Terms of service url.
        'tosUrl': '<your-tos-url>',
      };
    
      // Initialize the FirebaseUI Widget using Firebase.
      var ui = new firebaseui.auth.AuthUI(firebase.auth());
      // The start method will wait until the DOM is loaded.
      ui.start('#firebaseui-auth-container', uiConfig);
    </script>
    
  3. Remova o SDK do Identity Toolkit do seu app.

  4. Se você dependeu do token de ID do Identity Toolkit para o gerenciamento de sessões, faça as seguintes mudanças no lado do cliente:

    1. Depois de fazer login com o Firebase, receba um token de ID do Firebase chamando firebase.auth().currentUser.getToken().

    2. Envie o token de ID do Firebase para o servidor de back-end, valide-o e emita seu próprio cookie de sessão.

      Não dependa apenas do cookie de sessão ao realizar operações confidenciais ou enviar solicitações de edição autenticadas para o servidor. Você precisará fornecer proteção adicional contra falsificação de solicitações entre sites (CSRF, na sigla em inglês).

      Se o framework não fornecer proteção CSRF, uma maneira de evitar um ataque seria receber um token de ID do Firebase para o usuário conectado com getToken() e incluir o token em cada solicitação (o cookie de sessão também será enviado por padrão). Em seguida, valide esse token usando o SDK do servidor do Firebase, além da verificação de cookie de sessão, que o framework de back-end concluiu. Isso vai dificultar o sucesso de ataques CSRF, já que o token de ID do Firebase só é armazenado usando o armazenamento da Web e nunca em um cookie.

    3. Os tokens do Identity Toolkit são válidos por duas semanas. Talvez você queira continuar emitindo tokens que durem duas semanas ou torná-los mais longos ou mais curtos com base nos requisitos de segurança do seu app. Quando um usuário faz logout, limpe o cookie de sessão.

Etapa 3: atualizar URLs de redirecionamento de IDP

  1. No console do Firebase, abra a seção "Autenticação" e clique na guia Método de login.

  2. Para cada provedor de login federado que você aceita, faça o seguinte:

    1. Clique no nome do provedor de login.
    2. Copie o URI de redirecionamento OAuth.
    3. No console do desenvolvedor do provedor de login, atualize o URI de redirecionamento OAuth.

Android

Etapa 1: adicionar o Firebase ao app

  1. Abra o console do Firebase e selecione o projeto do Identity Toolkit, que você já importou.

  2. Na página "Visão geral", clique em Adicionar app e em Adicionar o Firebase ao seu app Android. Na caixa de diálogo "Adicionar o Firebase", forneça o nome do pacote e a impressão digital do certificado de assinatura do app e clique em Adicionar app. O google-services.json arquivo de configuração será baixado para o computador.

  3. Copie o arquivo de configuração para o diretório raiz do módulo do app Android. Esse arquivo de configuração contém informações do projeto e do cliente OAuth do Google.

  4. No arquivo build.gradle para envolvidos no projeto (<var>your-project</var>/build.gradle), especifique o nome do pacote do app na seção defaultConfig:

    defaultConfig {
       …..
      applicationId "com.your-app"
    }
    
  5. Também no arquivo build.gradle no nível do projeto, adicione uma dependência para incluir o plug-in dos Serviços do Google:

    buildscript {
     dependencies {
       // Add this line
       classpath 'com.google.gms:google-services:3.0.0'
     }
    }
    
  6. No arquivo build.gradle no nível do app (<var>my-project</var>/<var>app-module</var>/build.gradle), adicione a seguinte linha na parte de baixo para ativar o plug-in dos Serviços do Google:

    // Add to the bottom of the file
    apply plugin: 'com.google.gms.google-services'
    

    O plug-in dos Serviços do Google usa o arquivo google-services.json para configurar o aplicativo para usar o Firebase.

  7. Também no arquivo build.gradle no nível do app, adicione a dependência do Firebase Authentication:

    compile 'com.google.firebase:firebase-auth:24.1.0'
    compile 'com.google.android.gms:play-services-auth:21.5.1'
    

Etapa 2: remover o SDK do Identity Toolkit

  1. Remova a configuração do Identity Toolkit do arquivo AndroidManifest.xml. Essas informações estão incluídas no arquivo google-service.json e carregadas pelo plug-in dos Serviços do Google.
  2. Remova o SDK do Identity Toolkit do seu app.

Etapa 3: adicionar a FirebaseUI ao seu app

  1. Adicione a autenticação da FirebaseUI ao seu app.

  2. No seu app, substitua as chamadas para o SDK do Identity Toolkit por chamadas para a FirebaseUI.

iOS

Etapa 1: adicionar o Firebase ao app

  1. Adicione o SDK do Firebase ao seu app executando os seguintes comandos:

    $ cd your-project directory
    $ pod init
    $ pod 'Firebase'
    
  2. Abra o console do Firebase e selecione o projeto do Identity Toolkit, que você já importou.

  3. Na página "Visão geral", clique em Adicionar app e em Adicionar o Firebase ao seu app para iOS. Na caixa de diálogo "Adicionar o Firebase", forneça o ID do pacote e o ID da App Store do app e clique em Adicionar app. O GoogleService-Info.plist arquivo de configuração será baixado para o computador. Se o projeto tiver vários IDs de pacote, cada ID de pacote precisará ser conectado no console do Firebase para que ele possa ter o próprio arquivo GoogleService-Info.plist.

  4. Copie o arquivo de configuração para a raiz do seu projeto Xcode e adicione a todas as metas.

Etapa 2: remover o SDK do Identity Toolkit

  1. Remova GoogleIdentityToolkit do Podfile do seu app.
  2. Execute o comando pod install.

Etapa 3: adicionar a FirebaseUI ao seu app

  1. Adicione a autenticação da FirebaseUI ao seu app.

  2. No seu app, substitua as chamadas para o SDK do Identity Toolkit por chamadas para a FirebaseUI.