Ops, ho perso il telefono. Come posso ottenere l'OTP ora?

Cosa succede se hai implementato l’autenticazione a due fattori con il tuo telefono e lo hai perso?

Come recuperare e utilizzare un altro programma, ad esempio pass-otp, al suo posto?

Poiché non è possibile accedere senza il secondo fattore, come ottenere i token (segreto, emittente) che consentiranno di configurare un altro programma?

Dovrai disabilitare l’autenticazione a due fattori (2FA) tramite la console di Rails. Al momento, Discourse non dispone di un meccanismo di recupero integrato basato su SMS o email.

Discourse dispone di token di backup, da utilizzare se perdi il dispositivo OTP.

Puoi anche registrare l’OTP su più dispositivi.

È possibile utilizzare anche le chiavi FIDO2; Discourse supporta l’uso di più chiavi, quindi puoi avere chiavi di backup conservate in luoghi sicuri, la tua chiave principale e quelle integrate nel tuo dispositivo, come le impronte digitali su Android e i dispositivi di accesso Windows Hello sui laptop.

Se non hai fatto nessuno di questi passaggi, dovrai contattare il team di amministrazione e chiedere loro di disabilitare l’autenticazione a due fattori (2FA) sul tuo account.

Ok, puoi gentilmente indicare la procedura per disabilitare l’autenticazione a due fattori (2FA) dalla console?

Cerca “disabilita 2FA”: il primo risultato dice

Quindi:

./launcher enter app
rails c
id = User.find_by(username: "TUONOMEUTENTE").id
UserSecondFactor.totps.where(user_id: id).each(&:destroy!)

Beh, in realtà, dopo aver seguito il metodo sopra, non riesco più a accedere, nemmeno tramite email, con il seguente messaggio:

Il metodo di secondo fattore selezionato non è abilitato per il tuo account.

Un altro amministratore ha verificato che l’account non avesse l’autenticazione a due fattori (2FA) abilitata.


MODIFICA Ho riclassificato l’argomento come bug perché la soluzione proposta non funziona.

Oggi l’ho riconsiderato e ho scoperto che:

[25] pry(main)> how.totp_enabled?
=> false
[26] pry(main)> how.backup_codes_enabled?
=> true
[27] pry(main)> how.totp_or_backup_codes_enabled?
=> true

Quindi ho provato a rimuovere anche i codici di backup, seguendo la risposta precedente di @falco:

UserSecondFactor.backup_codes.where(user_id: id).each(&:destroy!)

Ecco ora la soluzione completa per disabilitare l’OTP per un utente che ha perso l’accesso: devi rimuovere sia le voci totps che i backup_codes, in modo che la chiamata a #totp_or_backup_codes_enabled? restituisca false.