Ir para o conteúdo principal

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

OBJETIVO

Permitir que os usuáusuários do e-Estado possam vincular suas contas do Google para que assim seja possípossível se autenticarem no e-Estado a partir dela.

JUSTIFICATIVA

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

RESULTADOS ESPERADOS

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

ENVOLVIDOS
  • Assessor:
    • Diego GonçGonçalves de Almeida.
  • Equipe cnica:
    • Diego Barros de Oliveira;
    • Alef Carvalho da Silva; e,
    • Anderson Soares Cardoso.
  • Gerente de Desenvolvimento:
    • Janderson de Castro Thomaz.
  • Product Owner:
    • natas Justiniano Lima.
  • Scrum Master:
    • MoiséMoisés Santos Rodrigues.
GLOSSÁGLOSSÁRIO
  • JavaScript - ÉÉ uma linguagem de programaçãprogramação de alto vel que segue as especificaçõespecificações ECMAScript.
  • OAuth - ÉÉ um padrãpadrão aberto de autorizaçãautorização. Por ser um padrãpadrão, éé utilizado para realizar integraçãintegração com diversos sistemas de terceiros, como o Google, Facebook, Github, etc.
  • Node.js - ÉÉ um ambiente de execuçãexecução JavaScript open-source que funciona utilizando o mecanismo Chrome V8.
  • PHP - ÉÉ uma linguagem de programaçãprogramação utilizada para desenvolvimentos de sistemas
  • TypeScript - ÉÉ um superconjunto sintásintático estrito de Javascript, criado e mantido pela Microsoft.
DESENVOLVIMENTO

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

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

Para a implementaçãimplementação das regras de negónegócio de integraçãintegração, serã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 digos necessánecessários e, assim, facilitar a implementaçãimplementação e manutençãmanutenção.

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

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

Autenticação com o Google.png

 

Conforme demonstrado, os passos serãserão os seguintes:

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

Exemplo do digo realizar a devida integraçã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çõinformações que o e-Estado teráterá acesso a partir da conta do Google do usuáusuário o apenas:

    • Email
    • Nome
    • Foto
CONCLUSÃCONCLUSÃO

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

REFERÊREFERÊNCIAS

[1] OpenID Connect. Disponí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í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íDisponível em: https://developers.google.com/identity/protocols/oauth2/web-server. Acesso em: 29 set 2021.

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