e-Estado: autenticação de usuários com o Google
Data: 01/09/21
Autores:
Igor Ramos de Oliveira (Assessor)- Diego Gonçalves de Almeida (Assessor)
1. 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.
2. 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.
3. 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:
- Precisa ser criado um projeto para o e-Estado através da sua plataforma de gerenciamento em: https://console.cloud.google.com
- A partir do projeto criada, é necessário criar uma credencial do tipo OAuth, em: https://console.cloud.google.com/apis/credentials.
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.
Conforme demonstrado, os passos serão os seguintes:
- O usuário escolhe na tela de login do e-Estado a autenticação utilizando o Google;
- O e-Estado inicia o processamento de coleta das informações do usuário a partir do serviço do Google;
- Ao ser requisitado, o Google verificará se o e-Estado já possui permissão de acesso as informações necessárias do usuário;
- 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;
- 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;
- Após a autorização, o e-Estado associada a conta do Google informada com o usuário de mesmo email;
- 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:
-
- Nome
- Foto
4. 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.
5. 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.