Open r3nanp opened 1 year ago
Acho que o termo correto da feature seria SSO (Single Sign On). Entendo que OAuth é só um protocolo. Uma forma de fazer o SSO.
Há pouco tempo eu habilitei o SSO com Google no meu site. Dá pra fazer tudo gratuito, mas é necessário uma conta no Gmail responsável pelo site. E essa parte não deveria ser distribuída pela comunidade.
Precisamos de alguém com acesso admin do GCP e Github do Tabnews para configurar os fluxos de OAuth. @filipedeschamps, pode nos indicar um responsável?
Como sugeriram no #952, eu acho que Google + Github ia ficar bem massa! 1 é pouco, 2 é bom, 3 é demais. Concordam?
Aqui estão os respectivos tutoriais:
https://developers.google.com/identity/gsi/web/guides/overview https://docs.github.com/en/developers/apps/building-oauth-apps/authorizing-oauth-apps
Além disso, precisamos fazer os ajustes no front (para mostrar os botões de SSO) e back (para o fluxo de autenticação).
Voluntários?
@GoulartNogueira, valeu pela correção e a desenvolver a ideia!
@GoulartNogueira existem maneiras para que isso possibilite desenvolver local, é possível utilizar um gateway de login, como o Keycloak, que é open source e tem a possibilidade rodar local através de um container Docker. (https://www.keycloak.org/getting-started/getting-started-docker) sendo assim poderia ser desenvolvido sem os administradores do repo proverem nenhuma chave secreta e trabalhamos totalmente desacoplados através dados sandbox local.
E implementando o protocolo OIDC é possível conectar o login no keycloak que por sua vez irá administrar a conexão com os provedores externos (Google, Github, Facebook) para login (eles chamam isso de federar). Existem outras vantagens, como ele já prover toda a infraestrutura de login, recuperação de senha, autenticação de dois fatores e cadastro. Porém apesar de gratuito, existe a necessidade de hospedar ele na própria infraestrutura.
Ah! Eu me voluntario pra isso
Fiz uma poc bem simples de login/cadastro via google para treinar/estudar, criei utilizando o react-oauth/google e a própria estrutura do projeto sem alterar modelo de banco, o link da PR está abaixo.
Explicando a implementação...
Frontend: o react-oauth/google no front cria o botão de login basta inserir a client-id do google e no callback do botão vem um JWT com os dados que vem do google que é enviado para uma rota nova criada no backend /api/v1/sessions/google
que continua o fluxo de login.
Backend: foi criado uma rota customizada de login /api/v1/sessions/google
que ao invés de receber um usuario/senha ele recebe um JWT, o google tem uma API para a validação dessa JWT que vem do front , depois de validado existem dois cenários para o login, um usuário que já foi criado anteriormente e um usuário que é novo. Um usuário que já existe basta fazer o login utilizando o email e o cadastro já existente e caso não tenha cria um cadastro com os dados vindo do google.
Pull Request - Teste Tabnews implementação google oauth
Ah e caso fique interessante dessa forma, me disponibilizo a fazer.
Alguém topa dar continuidade? É uma excelente ideia! Vamos implementar, pelo menos, o SSO do GitHub. O que acham?
Acham válido a criação de um user a partir de um provider como google, apple id, github e etc?