# Trocando a autenticação por uma alternativa sem senha

**URL:** https://meta.discourse.org/t/switching-out-authentication-for-a-passwordless-alternative/123821
**Category:** Feature
**Created:** [Julho 24, 2019, 10:01am UTC](https://meta.discourse.org/t/switching-out-authentication-for-a-passwordless-alternative/123821 "2019-07-24T10:01:39Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![pebble](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pebble/32/150652_2.png) [@pebble](https://meta.discourse.org/u/pebble)
#### Post date: [Julho 24, 2019, 10:01am UTC](https://meta.discourse.org/t/switching-out-authentication-for-a-passwordless-alternative/123821/1 "2019-07-24T10:01:39Z")

</div>

Este post é sobre um recurso que definitivamente não existe, mas que eu gostaria de implementar. Neste momento, não tenho ideia de quanto trabalho isso pode exigir, e o objetivo desta pergunta é tentar entender o que é necessário.

Algum contexto: estamos trabalhando em uma solução de autenticação sem senha. [https://trykno.com/](https://trykno.com/) A solução funciona como um serviço, o que significa que os proprietários de sites que utilizam o serviço não precisam lidar com o envio seguro de e-mails ou com o armazenamento de segredos e informações de identificação pessoal.

Seria ótimo termos um fórum para o projeto, e gostaríamos de usar o Discourse.  
No entanto, precisamos substituir a autenticação para que ela utilize o Kno.

Perguntas:

- O sistema de autenticação no Discourse é plugável?
- Existem suposições rígidas de que o usuário tenha um e-mail?
- Qual é o framework de front-end? (Vejo ember-rails no Gemfile, mas nenhuma referência ao Ember no package.json)

Peço desculpas se essas perguntas são simplistas; não sou desenvolvedor Ruby, e qualquer orientação sobre o problema seria valiosa. Obrigado.

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [Julho 24, 2019, 10:14am UTC](https://meta.discourse.org/t/switching-out-authentication-for-a-passwordless-alternative/123821/2 "2019-07-24T10:14:21Z")

</div>

> [@pebble](#):
>
> - O sistema de autenticação no Discourse é plugável?

Assumindo que você quis dizer “Discourse” 😛 Sim, ele é plugável. Você pode [desenvolver um plugin de autenticação](https://meta.discourse.org/t/adding-a-new-managed-authentication-method-to-discourse/106695) ou usar o [sistema nativo de SSO](https://meta.discourse.org/t/official-single-sign-on-for-discourse-sso/13045).

> [@pebble](#):
>
> - Existem suposições rígidas de que o usuário possui um e-mail?

Sim, todo usuário deve ter um e-mail no Discourse. Você **pode** fornecer e-mails inválidos (terminando em `.invalid`), mas não recomendamos isso.

> [@pebble](#):
>
> Qual é o framework de front-end?

Ember. Mas, para um plugin de autenticação, é improvável que você precise mexer no front-end.

---

<div class="post-metadata">

### Author: ![pebble](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pebble/32/150652_2.png) [@pebble](https://meta.discourse.org/u/pebble)
#### Post date: [Julho 24, 2019, 10:40am UTC](https://meta.discourse.org/t/switching-out-authentication-for-a-passwordless-alternative/123821/3 "2019-07-24T10:40:59Z")

</div>

> [@david](#):
>
> Assumindo que você se refere ao “Discourse” 😛 Sim, ele é compatível com plugins. Você pode [desenvolver um plugin de autenticação](https://meta.discourse.org/t/adding-a-new-managed-authentication-method-to-discourse/106695) ou usar o [sistema nativo de SSO](https://meta.discourse.org/t/official-single-sign-on-for-discourse-sso/13045)

Ah, constrangedor, vou atualizar.

> [@david](#):
>
> Sim, todo usuário deve ter um e-mail no Discourse. Você **pode** fornecer e-mails inválidos (terminando em `.invalid`), mas não recomendamos isso.

É uma funcionalidade que, ao usar o Kno, você não precisa conhecer o e-mail do usuário, embora ele possa ser solicitado.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [Julho 24, 2019, 11:58am UTC](https://meta.discourse.org/t/switching-out-authentication-for-a-passwordless-alternative/123821/4 "2019-07-24T11:58:39Z")

</div>

Atualmente, é possível não usar uma senha e apenas receber um link enviado para você.

Se o seu objetivo é desenvolver o kno, provavelmente você deseja desenvolvê-lo como um servidor OAuth. Assim, as pessoas poderão usá-lo como uma das várias fontes de autenticação, onde o SSO é a única opção. Veja [Discourse OAuth2 Basic](https://meta.discourse.org/t/oauth2-basic-support/33879)

---

<div class="post-metadata">

### Author: ![pebble](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pebble/32/150652_2.png) [@pebble](https://meta.discourse.org/u/pebble)
#### Post date: [Julho 26, 2019, 9:07am UTC](https://meta.discourse.org/t/switching-out-authentication-for-a-passwordless-alternative/123821/5 "2019-07-26T09:07:28Z")

</div>

Vejo a possibilidade de receber um link enviado, mas o Kno oferece mais recursos, como autenticação de dispositivo via WebAuthn, uma vez que você confirmou seu e-mail de uso único.

Desenvolver como um servidor OAuth, infelizmente, não atende aos requisitos de que precisamos. (Deveria provavelmente escrever algo em nossa FAQ explicando o porquê, mas a questão central é que o Kno permite que você se autentique em um dispositivo usando outro dispositivo).

Analisando as coisas com mais cuidado, parece que consigo montar uma primeira versão viável implementando uma solução de SSO específica para o Discourse.

---

<div class="post-metadata">

### Author: ![pebble](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pebble/32/150652_2.png) [@pebble](https://meta.discourse.org/u/pebble)
#### Post date: [Julho 26, 2019, 12:12pm UTC](https://meta.discourse.org/t/switching-out-authentication-for-a-passwordless-alternative/123821/6 "2019-07-26T12:12:06Z")

</div>

É possível usar um único provedor OAuth e desabilitar todos os outros tipos de autenticação?

Nesse caso, também seria bom que clicar em “Entrar” iniciasse automaticamente o fluxo de autenticação, ou seja, sem abrir o modal de login e pedir ao usuário para selecionar o provedor.

---

<div class="post-metadata">

### Author: ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)
#### Post date: [Julho 26, 2019, 4:42pm UTC](https://meta.discourse.org/t/switching-out-authentication-for-a-passwordless-alternative/123821/7 "2019-07-26T16:42:43Z")

</div>

Você talvez consiga corrigir isso.

Mas por que se preocupar, já que, uma vez que alguém faz login, raramente vê essa caixa de diálogo?

É melhor dedicar seu tempo de forma mais produtiva a outros problemas.

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [Julho 26, 2019, 4:44pm UTC](https://meta.discourse.org/t/switching-out-authentication-for-a-passwordless-alternative/123821/8 "2019-07-26T16:44:38Z")

</div>

> [@pebble](#):
>
> É possível usar um único provedor OAuth e desabilitar todos os outros tipos de autenticação?
> 
> Nesse caso, seria bom que, ao clicar em “Entrar”, o fluxo de autenticação fosse iniciado automaticamente, ou seja, sem abrir o modal de login e pedir para o usuário selecionar o provedor.

Você já tentou? Porque é assim que o Discourse funciona por padrão há anos 😉

---

<div class="post-metadata">

### Author: ![pebble](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pebble/32/150652_2.png) [@pebble](https://meta.discourse.org/u/pebble)
#### Post date: [Julho 26, 2019, 4:54pm UTC](https://meta.discourse.org/t/switching-out-authentication-for-a-passwordless-alternative/123821/9 "2019-07-26T16:54:04Z")

</div>

> [@Falco](#):
>
> Você já tentou? Porque é assim que o Discourse funciona por padrão há anos 😉

Bem, isso é excelente.  
Não, eu ainda não tentei, porque ainda não implementei o provedor OAuth para o meu serviço. E acho que, depois disso, precisarei criar um plugin, pois será um novo provedor OAuth.

Quase terminei minha integração com SSO, então acho que é o momento perfeito para migrar para o uso do OAuth. 😃
