filipedeschamps / tabnews.com.br

Conteúdos para quem trabalha com Programação e Tecnologia.
https://tabnews.com.br
GNU General Public License v3.0
5.21k stars 386 forks source link

[Feature request] - SSO (Single Sign On) #922

Open r3nanp opened 1 year ago

r3nanp commented 1 year ago

Acham válido a criação de um user a partir de um provider como google, apple id, github e etc?

GoulartNogueira commented 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?

GoulartNogueira commented 1 year ago

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).

Tarefas:

Voluntários?

r3nanp commented 1 year ago

@GoulartNogueira, valeu pela correção e a desenvolver a ideia!

ceelsoin commented 1 year ago

@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

gabriellhuver commented 1 year ago

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.

image

Pull Request - Teste Tabnews implementação google oauth

Ah e caso fique interessante dessa forma, me disponibilizo a fazer.

rachzy commented 6 months ago

Alguém topa dar continuidade? É uma excelente ideia! Vamos implementar, pelo menos, o SSO do GitHub. O que acham?