Ir para o conteúdo principal

e-Estado: autenticação de usuários com o Google

Data de elaboração 01/12/21
Responsável pelo estudo
  1. Diego Gonçalves de Almeida (Assessor)
  2. Igor Ramos de Oliveira (Assessor)
Equipe do estudo Esquadrão Suicida
Alvo e-Estado Autenticação
Origem


  • Objetivo estratégico: Necessidade de usuários do e-Estado se autenticarem com o Google.
Objetivo Permitir que os usuários do e-Estado possam vincular suas contas do Google para que assim seja possível se autenticarem no e-Estado a partir dela.
Documentação correlata (opcional)

https://console.cloud.google.com

https://console.cloud.google.com/apis/credentials

https://developers.google.com/identity/protocols/oauth2/openid-connect

https://developers.google.com/identity/protocols/oauth2/web-server

http://www.passportjs.org/docs/google/

https://github.com/googleapis/google-api-php-client

Observações Não possui.

Glossário
  • JavaScript - É uma linguagem de programação de alto nível que segue as especificações ECMAScript.
  • OAuth - É um padrão aberto de autorização. Por ser um padrão, é utilizado para realizar integração com diversos sistemas de terceiros, como o Google, Facebook, Github, etc.
  • Node.js - É um ambiente de execução JavaScript open-source que funciona utilizando o mecanismo Chrome V8.
  • PHP - É uma linguagem de programação utilizada para desenvolvimentos de sistemas
  • TypeScript - É um superconjunto sintático estrito de Javascript, criado e mantido pela Microsoft.

1. Introdução

Permitir que o usuário possa se autenticar no e-Estado utilizando o serviço de autenticação do Google, criando assim um alternativa mais padrão para o usuário, já que muitos utilizam esse tipo de autenticação em diversos sistemas, além de ser simples e segura.

É esperado que o usuário consiga se autenticar com a sua conta do Google após a realização da integração.

2. Desenvolvimento

Para a implementação da estratégia de autenticação integrada com o Google é necessário, primeiramente, ter um conta no Google que será responsável pelo projeto do e-Estado, após isso:

As credencias criadas são necessárias pois no momento da implementação do código para integração é necessário enviá-las para que assim o Google identifique a aplicação que está realizando a requisição de acesso as informações do usuário (após o mesmo permitir), neste caso o e-Estado.

Para a implementação das regras de negócio de integração, serão utizadas as bibliotecas google-api-php-client e google-api-nodejs-client, para PHP e JavaScript/TypeScript, respectivamente. Essas bibliotecas visam diminuir a quantidade de códigos necessários e, assim, facilitar a implementação e manutenção.

A utilização das bibliotecas anteriormente informadas também ajudam no desenvolvimento do código pois já possuem muitas funções prontas, e todas fortemente testadas, que serão necessárias para realizar a integração.

O fluxo de autenticação será conforme a imagem abaixo.

Autenticação com o Google.png


Conforme demonstrado, os passos serão os seguintes:

  1. O usuário escolhe na tela de login do e-Estado a autenticação utilizando o Google;
  2. O e-Estado inicia o processamento de coleta das informações do usuário a partir do serviço do Google;
  3. Ao ser requisitado, o Google verificará se o e-Estado já possui permissão de acesso as informações necessárias do usuário;
  4. Caso o e-Estado ainda não possua as permissões, o usuário será requisitado que autorize o acesso. Caso não autorize, não conseguirá se autenticar;
  5. Caso o usuário já tenha autorizado anteriormente, e não tenho revogado este acesso, não será mais necessário realizar o passo 4;
  6. Após a autorização, o e-Estado associada a conta do Google informada com o usuário de mesmo email;
  7. O usuário está autenticado via integração com o Google no e-Estado.

Exemplo do código realizar a devida integração:

import { Router } from "express";
import * as passport from "passport";
import { OAuth2Strategy } from "passport-google-oauth";

const router = Router();

passport.use(
  new OAuth2Strategy(
    {
      clientID: process.env.GOOGLE_CLIENT_ID,
      clientSecret: process.env.GOOGLE_CLIENT_SECRET,
      callbackURL: "http://localhost:3000/auth/google/callback",
    },
    function (accessToken, refreshToken, profile, done) {
      console.log({ accessToken, refreshToken, profile });

      User.findOrCreate({ googleId: profile.id }, function (err, user) {
        return done(err, user);
      });
    }
  )
);

router.get(
  "/auth/google",
  passport.authenticate("google", {
    scope: ["https://www.googleapis.com/auth/plus.login"],
  })
);

router.get(
  "/auth/google/callback",
  passport.authenticate("google", { failureRedirect: "/login" }),
  function (req, res) {
    res.redirect("/");
  }
);

É importante destacar que, as informações que o e-Estado terá acesso a partir da conta do Google do usuário são apenas:

    • Email
    • Nome
    • Foto
3. Conclusão

A partir deste estudo e dos testes realizados, conclui-se que é viável a implementação da integração com o Google para autenticação e que, de fato, é algo que trará mais comodidade ao usuário pois já é algo que a grande maioria usa no dia a dia em varias aplicações.

4. Referências

[1] OpenID Connect. Disponível em: https://developers.google.com/identity/protocols/oauth2/openid-connect. Acesso em: 29 set 2021.

[2] Google APIs Client Library for PHP. Dísponível em: https://github.com/googleapis/google-api-php-client. Acesso em: 29 set 2021.

[3] Using OAuth 2.0 for Web Server Applications. Disponível em: https://developers.google.com/identity/protocols/oauth2/web-server. Acesso em: 29 set 2021.

[4] Google OAuth. Disponível em: http://www.passportjs.org/docs/google/. Acesso em: 29 set 2021.