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. De agora em diante, o trabalho de recursos no Identity Toolkit será congelado. Todo o novo desenvolvimento de recursos será feito no Identity Platform e no Firebase Authentication. Incentivamos os desenvolvedores do Identity Toolkit a migrar para essas plataformas assim que for possível para os aplicativos deles.

Novos recursos

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

  • Novo Admin Console

    O Identity Platform tem um novo console de desenvolvedor que permite ver, modificar e excluir seus usuários. Isso pode ser útil para depurar seus fluxos de login e inscrição. O console também permite 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 empresarial, como SAML e OIDC, permitindo que você dimensione apps e serviços SaaS. O Identity Platform também oferece suporte a provedores como GitHub, Microsoft, Yahoo e muito mais. É possível usar o login anônimo para criar um ID de usuário exclusivo sem exigir que o usuário passe por um processo de login ou inscrição. Isso permite fazer chamadas de API autenticadas como faria com um usuário comum. Quando o usuário decide se inscrever em uma conta, toda a atividade é preservada com o mesmo User-ID. Isso é útil para cenários como carrinhos de compras do lado do servidor ou outros aplicativos em que você quer envolver o usuário antes de enviá-lo por um fluxo de inscrição.

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

    O Identity Platform foi criado na infraestrutura confiável do Google e oferece contratos de nível de serviço e suporte do Google Cloud. Isso significa que você pode dimensionar seu serviço com confiança e contar com o Google para oferecer a resiliência, a disponibilidade e a escalonabilidade necessárias.

  • 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, mensagens na nuvem, banco de dados em tempo real, armazenamento de arquivos, hospedagem estática, configuração remota, relatórios de falhas para dispositivos móveis e testes do Android.

  • Interfaces atualizadas

    Reconstruímos completamente os fluxos de interface com base na mais recente pesquisa de UX 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, o que melhorou significativamente a conversão de login e inscrição para apps participantes. Ele também oferece suporte a modificações fáceis de temas para corresponder ao seu aplicativo e, para máxima capacidade de personalização, as versões Android e iOS foram disponibilizadas como código aberto.

  • Configuração simplificada do servidor

    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 Identity Platform 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 seus usuários. Além disso, não é mais necessário hospedar os widgets da 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 com cada uma das nossas bibliotecas de cliente (Android, iOS, Web). Os desenvolvedores poderão fazer login e inscrever usuários novos e antigos, acessar propriedades do usuário, vincular, atualizar e excluir contas, redefinir senhas e muito mais sem estar vinculados a uma interface de usuário fixa. Se preferir, você pode criar manualmente todo o fluxo e a experiência de login com base nessa API.

  • Gerenciamento de sessão para apps móveis

    Com o Identity Toolkit, os apps criavam o próprio estado da 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, 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 se autentique novamente no dispositivo.

Diferenças de recursos

Alguns recursos do Identity Toolkit não estão disponíveis no momento na Identity Platform, 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 conta e o banco de dados principal de usuários, passou apenas por pequenas atualizações. No entanto, alguns recursos e a maneira de integrar a Plataforma de identidade 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 seu aplicativo com o fluxo de recuperação de senha e definir uma senha para a conta.

  • Bibliotecas do servidor

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

  • E-mails de gerenciamento da conta

    A redefinição de senha, a verificação de e-mail e as mensagens de mudança 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 interface, mas podem ser ainda mais personalizados com os SDKs Admin.

  • Confirmação da mudança de endereço de e-mail

    No Identity Toolkit, quando um usuário decide mudar o endereço de e-mail, um e-mail é enviado para o novo endereço com um link para continuar o fluxo de mudança de endereço de e-mail.

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

  • Lançamento do IDP

    O Identity Toolkit tinha a capacidade de adicionar provedores de identidade ao seu sistema de login gradualmente, para que você pudesse testar o impacto nas suas solicitações de suporte. Esse recurso foi removido do 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. 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.

  • Widget da interface

    Todos os fluxos de interface que gerenciam login, inscrição, recuperação de senha e vinculação de contas foram recriados usando os SDKs de cliente e empacotados como um widget de login. Eles estão disponíveis como SDKs de código aberto para iOS, Android e Web, e permitem personalizar 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 na Identity Platform, as sessões atuais dos usuários serão encerradas ao fazer upgrade do SDK, e eles precisarão fazer login novamente.

Antes de começar

Antes de migrar do Identity Toolkit para o Identity Platform, você precisa:

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

  2. No Marketplace, acesse Identity Platform e selecione "Ativar o Identity Platform".

  3. Abra a Contas de serviço. Aqui você pode ver 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 com 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 ao console do Cloud. Na seção "Provedores", no método de login "E-mail/senha", abra a página Modelos de e-mail. Depois, você pode personalizar os modelos do app.

    No Identity Toolkit, quando os usuários redefinem senhas, mudam endereços de e-mail ou verificam os endereços de 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 Identity Platform envia e-mails com base nos modelos que você configura sem ações adicionais necessárias.

  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. No 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 seu app: Android, iOS ou Web.

Servidores e JavaScript

Mudanças importantes

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

  • Gerenciamento de sessões da Web

    Antes, quando um usuário se autenticava usando o widget do Identity Toolkit, um cookie era definido para o usuário e usado para inicializar a sessão. Esse cookie tinha um ciclo de vida 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 usaram o cookie para criar os próprios cookies pelo sistema de gerenciamento de cookies do framework.

    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 as sessões quando ocorrem mudanças importantes na conta (como alterações de senha do usuário). Os tokens de ID não são definidos automaticamente como cookies no cliente da Web e têm uma vida útil de apenas uma hora. A menos que você queira sessões de apenas uma hora, os tokens de ID não são adequados para serem usados como o cookie para validar todas as solicitações de página. Em vez disso, você precisa configurar um listener para quando o usuário fizer login, receber o token de ID, validar o token e criar seu próprio cookie usando o sistema de gerenciamento de cookies do seu framework.

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

  • Fluxo de login na Web

    Antes, 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 usuário do Identity Platform 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. Isso vai facilitar o suporte a usuários anônimos, usuários de autenticação personalizada ou usuários de provedores em que endereços de e-mail não são obrigatórios.

  • Widget de gerenciamento da conta

    Esse widget oferece uma interface para que os usuários mudem endereços de e-mail, 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 card do usuário não são mais fornecidos. Eles podem ser criados com muita facilidade usando a API Firebase Authentication.

  • Nenhum signOutUrl

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

  • No oobActionUrl

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

  • Personalização do CSS

    O widget de UI usa o estilo Material Design Lite, que adiciona animações do Material Design de forma dinâmica.

Etapa 1: mudar o código do servidor

  1. Se o servidor depender do token do Identity Toolkit (válido por duas semanas) para gerenciar sessões de usuários da Web, será necessário 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, considere o usuário autenticado. Caso contrário, trate a solicitação como não autenticada.
    3. Se você não quiser que nenhum dos seus 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 de ID são diferentes dos tokens do Identity Toolkit, você precisa atualizar sua lógica de validação de token. Instale o SDK Admin no seu servidor ou, se você usar uma linguagem não compatível com o SDK Admin, baixe uma biblioteca de validação de token JWT para seu ambiente e valide o token corretamente.

  3. Quando você fizer as atualizações acima pela primeira vez, ainda poderá ter caminhos de código que dependem de tokens do Identity Toolkit. Se você tiver aplicativos para iOS ou Android, os usuários precisarão atualizar 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 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 Identity Platform. Portanto, você só precisará usar os métodos de verificação do token de ID.

Consulte a Referência da API da Web.

Etapa 2: atualizar o HTML

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

    1. Abra seu projeto no console do Cloud.
    2. Na página providers, 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 de autenticação 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ê usou o token de ID do Identity Toolkit para gerenciamento de sessões, faça as seguintes mudanças 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 confie apenas no cookie de sessão ao realizar operações sensíveis ou enviar solicitações de edição autenticadas ao seu servidor. Você precisará fornecer proteção adicional contra falsificação de solicitações entre sites (CSRF).

      Se o framework não oferecer proteção contra CSRF, uma maneira de evitar um ataque seria receber 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, valide esse token usando o SDK Admin, além da verificação do cookie de sessão, que foi concluída pelo framework de back-end. Isso dificulta a ocorrência de ataques CSRF, já que o token de ID é armazenado apenas usando 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 aumentar ou diminuir esse período 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 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 do OAuth.
    3. No console do desenvolvedor do provedor de login, atualize o URI de redirecionamento do 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 Começar no Firebase. Na caixa de diálogo "Adicionar Firebase", informe o nome do pacote e a impressão digital do certificado de assinatura do app e clique em Adicionar app. O arquivo de configuração google-services.json 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 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. Também 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 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:24.0.1'
    compile 'com.google.android.gms:play-services-auth:21.4.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 são carregadas pelo plug-in google-services.
  2. Remova o SDK do Identity Toolkit do seu app.

Etapa 3: adicionar a FirebaseUI ao seu app

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

  2. No seu app, substitua as chamadas ao SDK do Identity Toolkit por chamadas ao FirebaseUI.

iOS

Etapa 1: adicionar o Firebase ao app

  1. Execute os comandos a seguir para adicionar o SDK do cliente ao 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 Começar no Firebase. Na caixa de diálogo "Adicionar Firebase", informe o nome do pacote e a impressão digital do certificado de assinatura do app e clique em Adicionar app. O arquivo de configuração google-services.json será baixado no seu computador. Na caixa de diálogo "Adicionar Firebase", informe o ID do pacote e o ID da App Store do app e clique em Adicionar app. O arquivo de configuração GoogleService-Info.plist será baixado para o computador. Se o projeto tiver vários IDs de pacote, cada um deles precisa ser conectado no 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 do FirebaseUI ao seu app.

  2. No seu app, substitua as chamadas ao SDK do Identity Toolkit por chamadas ao FirebaseUI.