Migrar do Google Identity Toolkit para a Identity Platform do Google Cloud

A versão mais recente do Google Identity Toolkit foi lançada como Identity Platform e Firebase Authentication. A partir de agora, o trabalho com recursos no Identity Toolkit será congelado. Todo o desenvolvimento de novos recursos será feito no Identity Platform e no Firebase Authentication. Incentivamos os desenvolvedores do Identity Toolkit a migrar para essas plataformas assim que for prático para os aplicativos.

Novos recursos

O Identity Platform já tem melhorias significativas nos recursos em relação ao Google Identity Toolkit:

  • Novo Admin Console

    O Identity Platform tem um novo console para desenvolvedores que permite visualizar, modificar e excluir os usuários. Isso pode ser útil para depurar os fluxos de login e inscrição. Nele, você também pode configurar métodos de autenticação e personalizar modelos de e-mail.

  • Novos métodos de autenticação

    O Identity Platform oferece suporte a padrões de federação empresariais, como SAML e OIDC, permitindo o escalonamento de apps e serviços SaaS. O Identity Platform também oferece suporte a provedores como GitHub, Microsoft, Yahoo e outros. Você pode usar o login anônimo para criar um ID de usuário único sem exigir que o usuário passe por qualquer processo de login ou inscrição. Isso permite fazer chamadas de API autenticadas como você faria com um usuário normal. Quando o usuário se inscreve em uma conta, toda a atividade é preservada com o mesmo ID do usuário. Isso é útil em cenários como carrinhos de compras do lado do servidor ou outros aplicativos em que você quer engajar o usuário antes de enviá-lo por um fluxo de inscrição.

  • Escalone com confiança com contratos de nível de serviço e suporte do Google Cloud

    O Identity Platform foi criado com base em uma infraestrutura confiável do Google e oferece contratos de nível de serviço e suporte do Google Cloud. Isso significa que é possível escalonar seu serviço com confiança e confiar no Google para fornecer a resiliência, a disponibilidade e a escalonabilidade de que você precisa.

  • Acesso a todos os recursos do Firebase

    O Firebase é uma plataforma móvel que ajuda a desenvolver apps de alta qualidade, aumentar sua base de usuários e lucrar mais. O Firebase é composto de recursos complementares que você pode combinar de acordo com suas necessidades, além de infraestrutura para análise de dispositivos móveis, mensagens na nuvem, banco de dados em tempo real, armazenamento de arquivos, hospedagem estática, configuração remota, relatórios de erros para dispositivos móveis e testes do Android .

  • IUs atualizadas

    Reconstruímos completamente os fluxos de IU 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 do Android, que melhorou significativamente a conversão de login e inscrição dos apps participantes. Ele também oferece suporte a modificações de tema fáceis para combinar com seu aplicativo e, para maior personalização, as versões para Android e iOS têm o código aberto.

  • Configuração simplificada do servidor

    Com o Identity Toolkit, notamos que muitos desenvolvedores optaram por não implementar o fluxo de recuperação de e-mail, o que tornava impossível para os usuários recuperarem suas contas caso esqueçam a senha. O Identity Platform pode enviar mensagens de verificação de e-mail, redefinição de senha e alteração de senha ao usuário, e o texto pode ser personalizado facilmente para os usuários. Além disso, você não precisa mais hospedar os widgets de interface para hospedar redirecionamentos e concluir operações de mudança de senha.

  • Novos SDKs

    Todas as APIs de servidor do Identity Toolkit agora estão disponíveis de forma nativa em cada uma das nossas bibliotecas de cliente (Android, iOS, Web). Os desenvolvedores poderão fazer login e inscrição de usuários novos e antigos, acessar propriedades do usuário, vincular, atualizar e excluir contas, redefinir senhas e muito mais sem se vincular a uma interface fixa. Se preferir, você pode criar manualmente todo seu próprio fluxo de login e experiência sobre essa API.

  • Gerenciamento de sessões em 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 Identity Platform usa um serviço de back-end que recebe um token de atualização, criado do evento de autenticação, e o troca por tokens de acesso de uma hora para Android, iOS e JavaScript. Quando um usuário altera a senha, os tokens de atualização não podem mais gerar novos tokens de acesso, desativando assim o acesso até que o usuário se autentica novamente nesse dispositivo.

Diferenças de recursos

No momento, alguns recursos do Identity Toolkit não estão disponíveis no Identity Platform. Outros recursos 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, eles podem não ser importantes para o app ou pode haver substitutos fáceis que permitam continuar com a migração.

Diferenças no servidor

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

  • Provedores de identidade

    Não há suporte para PayPal e AOL. Os usuários com contas desses IdPs ainda podem fazer login no seu aplicativo com o fluxo de recuperação de senha e configurar uma senha para a conta deles.

  • Bibliotecas do servidor

    Atualmente, existem SDKs Admin disponíveis para Java, Node.js, Python, Go e C#.

  • E-mails de gerenciamento da conta

    Mensagens de redefinição de senha, verificação de e-mail e alteração de e-mail podem ser realizadas pelo Firebase ou pelo servidor de e-mail do desenvolvedor. No momento, os modelos de e-mail oferecem apenas personalização limitada na IU, mas podem ser ainda mais personalizados com os SDKs Admin.

  • Confirmação de alteração do 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 que tem 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 ao endereço de e-mail antigo com um link para reverter a alteração.

  • Lançamento do IdP

    O Identity Toolkit conseguiu adicionar provedores de identidade ao sistema de login gradualmente, para que você pudesse testar o impacto em suas solicitações de suporte. Este recurso foi removido no Firebase Authentication.

Diferenças no lado do cliente

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

  • SDKs de cliente e servidor

    No Identity Platform, a funcionalidade fornecida pela API REST do Identity Toolkit foi empacotada em SDKs de cliente disponíveis para Android, iOS e JavaScript. É possível 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.

  • Widget de IU

    Todos os fluxos de interface que gerenciam o login, a inscrição, a recuperação de senha e a vinculação de contas foram recriados usando os SDKs do cliente e empacotados como um widget de login. Eles estão disponíveis como SDKs de código aberto para iOS, Android e Web. Eles permitem personalizar completamente os fluxos de maneiras impossí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 Identity Platform, 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 Identity Platform, você precisa fazer o seguinte:

  1. Abra o Console do Cloud e selecione o projeto do Identity Toolkit.

  2. No Marketplace, navegue até Identity Platform e selecione "Ativar Identity Platform".

  3. Abra a Contas de serviço. Aqui é possível ver a conta de serviço configurada anteriormente para o Identity Toolkit.

  4. Ao lado da conta de serviço, clique em > Criar chave. Depois, na caixa de diálogo Criar chave privada, defina o Tipo de chave como JSON e clique em Criar. Será feito o download de um arquivo JSON com as credenciais da sua conta de serviço. Ele será necessário para inicializar o SDK na próxima etapa.

  5. Volte para o console do Cloud. Na seção "Provedores", no método de login "E-mail/senha", abra a página Modelos de e-mail. Em seguida, é possível personalizar os modelos do app.

    No Identity Toolkit, quando os usuários redefinem senhas, alteraram endereços de e-mail ou verificavam os endereços de e-mail, era necessário receber um código OOB do servidor do Identity Toolkit e enviá-lo aos usuários por e-mail. O Identity Platform envia e-mails com base nos modelos que você configura sem precisar fazer mais nada.

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

    1. É possível instalar o SDK Admin para Node.js com npm:

      $ npm init
      $ npm install --save firebase-admin
      
    2. Com seu código, é possível 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 app: Android, iOS ou Web.

Servidores e JavaScript

Mudanças importantes

Há uma série de outras diferenças na implementação do Identity Platform na Web com o Identity Toolkit.

  • Gerenciamento de sessões da Web

    Antes, quando um usuário era autenticado usando o widget do Identity Toolkit, um cookie era definido para o usuário, usado para inicializar a sessão. Esse cookie tinha uma vida útil de duas semanas e foi usado para permitir que o usuário usasse o widget de gerenciamento de conta para alterar a senha e o endereço de e-mail. Alguns sites usaram esse cookie para autenticar todas as outras solicitações de página. Outros sites usaram esse cookie para criar os próprios cookies por meio do sistema de gerenciamento de cookies da estrutura deles.

    Os SDKs de cliente do Identity Platform agora gerenciam tokens de ID e trabalham com o back-end do Identity Platform para manter a sessão atualizada. O back-end expira quando ocorrem mudanças importantes na conta, como mudanças na senha do usuário. Os tokens de ID não são definidos automaticamente como cookies no cliente da Web e têm apenas uma hora de vida. A menos que você queira que sessões de apenas uma hora, os tokens de ID não podem ser usados como o cookie para validar todas as suas solicitações de página. Em vez disso, você vai precisar configurar um listener para quando o usuário fizer login, receber o token de ID, validar o token e criar seu próprio cookie por meio do 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 seu aplicativo.

  • Fluxo de login na Web

    Anteriormente, os usuários eram redirecionados para accountchooser.com quando o login era iniciado para saber qual identificador eles queriam usar. O fluxo da interface do Identity Platform agora começa com uma lista de métodos de login, incluindo uma opção de e-mail que acessa 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 necessários na interface. Isso 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 necessários.

  • Widget de gerenciamento de contas

    Esse widget fornece uma interface para que os usuários alterem endereços de e-mail, alterem a senha ou desvinculem as contas dos provedores de identidade. Ele está em desenvolvimento.

  • Botão/widget de login

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

  • Sem signOutUrl

    É necessário chamar firebase.auth.signOut() e processar o callback.

  • Nenhum oobActionUrl

    O envio de e-mails agora é processado pelo Identity Platform e configurado no Console do Firebase.

  • Personalização de CSS

    O widget da IU usa o estilo Material Design Lite, que adiciona dinamicamente animações do Material Design.

Etapa 1: alterar 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, você precisa converter o servidor para usar o próprio cookie de sessão.

    1. Implemente um endpoint para validar o token de ID 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, o usuário poderá ser considerado autenticado. Caso contrário, trate a solicitação como não autenticada.
    3. Se você não quiser que os usuários percam as sessões de login, aguarde duas semanas para que todos os tokens do Identity Toolkit expirem ou faça a validação de dois tokens para seu aplicativo da Web, conforme descrito abaixo na etapa 3.
  2. Em seguida, como os tokens de ID são diferentes dos tokens do Identity Toolkit, é necessário atualizar a lógica de validação do token. Instale o SDK Admin no seu servidor. Se você usa uma linguagem não compatível com ele, faça o download de uma biblioteca de validação do token JWT para seu ambiente e valide o token corretamente.

  3. Quando você faz as atualizações acima pela primeira vez, ainda pode ter caminhos de código que dependem dos 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 outra lógica de validação do servidor que examine o token e determine se é necessário 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 movidas para o Identity Platform. Portanto, você só precisa usar os métodos de verificação do token de ID.

Consulte a Referência da API Web.

Etapa 2: atualizar o HTML

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

    1. Abra seu projeto no console do Cloud.
    2. Na página provedores, clique em Detalhes da configuração do aplicativo. Um snippet de código que inicializa o Identity Platform é exibido.
    3. Copie e cole o snippet de inicialização na sua página da Web.
  2. Adicione o widget do Authentication ao 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 aplicativo.

  4. Se você confiou no token de ID do Identity Toolkit para o gerenciamento de sessões, precisa fazer as seguintes alterações no lado do cliente:

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

    2. Envie o token de ID 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 seu servidor. Será necessário fornecer proteção adicional contra falsificação de solicitações entre sites (CSRF, na sigla em inglês).

      Se o framework não fornecer a proteção CSRF, uma maneira de evitar um ataque seria conseguir um token de ID 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, você validaria esse token usando o SDK Admin, além da verificação de cookie de sessão, concluída pelo framework de back-end. Isso dificultará o sucesso dos ataques CSRF, já que o token de ID é armazenado apenas usando o armazenamento da Web e nunca em um cookie.

    3. Os tokens do Identity Toolkit são válidos por duas semanas. Você pode continuar emitindo tokens que duram duas semanas ou pode querer torná-los mais longos ou mais curtos com base nos requisitos de segurança do seu aplicativo. Quando um usuário sair, limpe o cookie de sessão.

Etapa 3: atualizar os URLs de redirecionamento do IdP

  1. No Console do Cloud, abra a seção Provedores.

  2. Para cada provedor de login federado compatível, faça o seguinte:

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

Android

Etapa 1: adicionar o Identity Platform ao seu app com o Firebase

  1. Abra o Console do Cloud e selecione seu projeto do Identity Toolkit.

  2. Na página "Provedores", clique em Detalhes da configuração do aplicativo, selecione a guia Android e clique em Primeiros passos no Firebase. Na caixa de diálogo "Add Firebase", forneça o nome do pacote e a impressão digital do certificado de assinatura do app e clique em Add App. O arquivo de configuração google-services.json é transferido por download para seu computador.

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

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

    defaultConfig {
       …..
      applicationId "com.your-app"
    }
    
  5. Ainda no arquivo build.gradle no nível do projeto, adicione uma dependência para incluir o plug-in google-services:

    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 após o Plug-in do Android para Gradle para ativar o plug-in google-services:

    apply plugin: 'com.android.application'
    // Add this line
    apply plugin: 'com.google.gms.google-services'
    

    O plug-in google-services usa o arquivo google-services.json para configurar seu 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:22.3.1'
    compile 'com.google.android.gms:play-services-auth:21.0.0'
    

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 google-services.
  2. Remova o SDK do Identity Toolkit do seu aplicativo.

Etapa 3: adicionar a FirebaseUI ao seu app

  1. Adicione a Autenticação da FirebaseUI ao 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. Execute os seguintes comandos para adicionar o SDK do cliente ao seu app:

    $ cd your-project directory
    $ pod init
    $ pod 'Firebase'
    
  2. Abra o Console do Cloud e selecione seu projeto do Identity Toolkit.

  3. Na página "Provedores", clique em Detalhes da configuração do aplicativo, selecione a guia iOS e clique em Primeiros passos no Firebase. Na caixa de diálogo "Add Firebase", forneça o nome do pacote do app e a impressão digital do certificado de assinatura e clique em Add App. O arquivo de configuração google-services.json é transferido para o computador. Na caixa de diálogo "Adicionar Firebase", forneça o ID do pacote e da App Store do seu app e clique em Adicionar app. Em seguida, o arquivo de configuração GoogleService-Info.plist é transferido por download para seu computador. Se o projeto tiver vários IDs de pacotes, cada um deles precisará estar conectado ao Console do Firebase para ter o próprio arquivo GoogleService-Info.plist.

  4. Copie o arquivo de configuração para a raiz do seu projeto Xcode e adicione-o a todos os destinos.

Etapa 2: remover o SDK do Identity Toolkit

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

Etapa 3: adicionar a FirebaseUI ao seu app

  1. Adicione a Autenticação da FirebaseUI ao app.

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