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, jájá 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.
- Diego
- Equipe
TéTécnica:- Diego Barros de Oliveira;
- Alef Carvalho da Silva; e,
- Anderson Soares Cardoso.
- Gerente de Desenvolvimento:
- Janderson de Castro Thomaz.
- Product Owner:
JôJônatas Justiniano Lima.
- Scrum Master:
MoiséMoisés Santos Rodrigues.
GLOSSÁGLOSSÁRIO
- JavaScript -
ÉÉ uma linguagem deprogramaçãprogramação de altonínível que segue asespecificaçõespecificações ECMAScript. - OAuth -
ÉÉ umpadrãpadrão aberto deautorizaçãautorização. Por ser umpadrãpadrão,éé utilizado para realizarintegraçãintegração com diversos sistemas de terceiros, como o Google, Facebook, Github, etc. - Node.js -
ÉÉ um ambiente deexecuçãexecução JavaScript open-source que funciona utilizando o mecanismo Chrome V8. - PHP -
ÉÉ uma linguagem deprogramaçãprogramação utilizada para desenvolvimentos de sistemas - TypeScript -
ÉÉ um superconjuntosintá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:
- Precisa ser criado um projeto para o e-Estado
atravéatravés da sua plataforma de gerenciamento em: https://console.cloud.google.com - A partir do projeto criada,
éénecessánecessário criar uma credencial do tipo OAuth, em: https://console.cloud.google.com/apis/credentials.
As credencias criadas sãsão necessánecessárias pois no momento da implementaçãimplementação do cócó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 cócó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 cócódigo pois jájá 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.
Conforme demonstrado, os passos serãserão os seguintes:
- O
usuáusuário escolhe na tela de login do e-Estado aautenticaçãautenticação utilizando o Google; - O e-Estado inicia o processamento de coleta das
informaçõinformações dousuáusuário a partir doserviçserviço do Google; - Ao ser requisitado, o Google
verificaráverificará se o e-Estadojájá possuipermissãpermissão de acesso asinformaçõinformaçõesnecessánecessárias dousuáusuário; - Caso o e-Estado ainda
nãnão possua aspermissõpermissões, ousuáusuárioseráserá requisitado que autorize o acesso. Casonãnão autorize,nãnãoconseguiráconseguirá se autenticar; - Caso o
usuáusuáriojájá tenha autorizado anteriormente, enãnão tenho revogado este acesso,nãnãoseráserá maisnecessánecessário realizar o passo 4; ApóApós aautorizaçãautorização, o e-Estado associada a conta do Google informada com ousuáusuário de mesmo email;- O
usuáusuárioestáestá autenticado viaintegraçãintegração com o Google no e-Estado.
Exemplo do cócó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 sãsão apenas:
-
- 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 jájá éé 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.