downey
(Michael Downey)
1
再現手順
- 最新の Discourse サイトの管理者であり、セキュリティキーや認証アプリなど、1 つ以上の二段階認証キーが有効になっている状態にする。
- その二段階認証キーを使用して、正常にログインおよびログアウトできることを確認する。
- サイト設定で「二段階認証ログインの強制」が「いいえ」に設定されていることを確認する。
- 管理者のユーザープロファイル設定の「セキュリティ」タブにある標準的な UI ツールを使用して、(管理者) アカウントからすべての二段階認証アイテムを削除する。
- ログアウトする。
期待される動作
- ユーザー名またはパスワードでサイトにログインし、アクセスが許可される。または
- 「メールでリンクを送信」でサイトにログインし、アクセスが許可される。
実際の動作
上記の「期待される」シナリオの両方がエラーメッセージで失敗し、ログインが許可されません。
選択された二段階認証方法は、あなたのアカウントで有効になっていません。
これにより、管理者アカウントでのログイン手段が完全に失われます。
なお、私は実際には該当サイトから完全にロックアウトされたわけではありませんでした。別のコンピュータでアクティブなセッションがまだ残っており、そのセッションに切り替えてトークンベースの認証アプリを再追加することで復旧できました。しかし、もし別のセッションがなかった場合、完全にロックアウトされていたはずです。
「いいね!」 10
simon
2
ご報告ありがとうございます。数日前からブックマークに入れておりましたが、まだテストする機会がありませんでした。ご報告の内容は正しいと推測していますが、来週詳しく確認いたします。
「いいね!」 4
sam
(Sam Saffron)
3
これはバグでしょうか?サイト設定で「すべての管理者に 2 要素認証を必須とする」ことが有効になっている場合、そのような操作は許可されるべきではありません。
完全にロックアウトされているわけではないようですが、コンソールを使って現在復旧可能です。しかし、このような矛盾した状況を簡単に作成できる状態にしておくべきではありません。
downey
(Michael Downey)
4
そのロジックは正しいとは言い切れないと思います。私は「第二要素の強制」をデフォルト値の「いいえ」以外に設定していませんでしたし、すべてのインストールで複数の管理者アカウントが存在すると仮定するのは現実的ではありません。プロフィールから 2FA キーが削除されると、どこかで別のフラグが削除されていないように思えます。
完全にロックアウトされているわけではないので、現在はコンソールを使って復旧できます
これは有効な緊急時の回避策だとは思いますが、サーバー自体も管理していない管理者にはそのスキルが及ばない可能性があり、システム管理者を探す必要に迫られるかもしれません。
「いいね!」 4
riking
(Kane York)
5
回復コードがそのまま残っているか気になっています。その中の一つを入力してみてください。
「いいね!」 1
sam
(Sam Saffron)
6
@Osama コードをいじっている間に、おそらく:
「いいね!」 1
ewblen
8
本日、アップグレードされた Discourse バージョン 2.7.10 で同じバグに遭遇したと思われます。
管理権限を付与され、2FA を有効にしました。その後、別のメールアドレスで自分用の 2 番目のユーザーを作成し、管理専用として使用し、そのユーザーに管理権限を付与しました。
次に、元のユーザーから管理権限を削除し、すべての 2FA メソッドを削除しました。現在、元のユーザーは OP が言及したエラー動作を受け取っています。
このサーバーへのコンソールアクセスはありません。サイトは管理者に対して 2FA を強制していません。
この問題を解決するためにコンソールで何をする必要があるか、誰か詳しく教えていただけますか。
ちなみに、私がこのようにした理由は、通常のユーザーとして、サイト上のプライベートグループに対して通常の権限と通知(またはその逆)の対象となり、おそらくメーリングリストモードを有効にしたいからです。通常のユーザーとして 2FA の追加の摩擦は必要ありません。
もちろん、管理ユーザーはすべてを見ることができます。そのため、不必要に詮索しないという信頼にかかっています。そのユーザーはすべての通知をオフにしたままにすることができ、メーリングリストモードを有効にしないことができます。
「いいね!」 1
ewblen
9
リカバリーコードは2FAログインフローからしか使用できないため、使用する機会がないと思います。
ewblen
10
@sam コンソールでこの問題を解決できると、具体的に何をすべきか言わずに、もったいぶって言っていますね。この特定の問題を修正する方法について、ヒントをいただけると大変助かります。
ewblen
12
いいえ、おそらくそうではありません。アカウントではすでに2FAが無効になっているか、より正確には、アカウントからすべての2FAメソッドを削除しています(プロフィールでは2FAは「いいえ」と表示されています)。それにもかかわらず、ログインはまだ2FAを使用しようとしています。
そのガイドは、2FAが有効になっているが、有効なトークンを生成する手段を失った/忘れたユーザーのためのものです。
ewblen
13
解決策:管理者ユーザーとして、ロックアウトされたユーザーの詳細ページにアクセスし、一番下までスクロールして、赤い「なりすまし」ボタンをクリックします。
その後、ユーザー設定で2FAメソッドを追加します。(これを行うには、ユーザーのパスワードが必要です)
2FAシークレットは、ロックアウトされたユーザーに渡す必要があります。
この場合、私自身が両方のユーザーなので、難しい作業ではありません 
「いいね!」 1
素晴らしい。

その後、ユーザーから2FAを正常に削除することはできましたか?
ewblen
15
いいえ。2FAメソッドを削除したことで、ユーザーは再びロックアウトされました。
2FAを無効にするボタンを押して2FAを削除すると、最後の2FAメソッドを削除するのと動作が異なりますか?つまり、そのボタンを押すとロックアウトされずに削除されますか?
RGJ
(Richard - Communiteq)
17
コンソールを使用してこれを再現し、解決策を見つけることができました。
再現手順は、最初の投稿で説明されているものとは少し異なります。手順 2 が重要であり、手順 3 と 4 はそれほど重要ではありません。
- 管理者権限を持つ、またはセキュリティキーや認証アプリなどの 2 要素認証キーが 1 つ以上有効になっている最新の Discourse サイトで、ユーザーとしてログインします。
- バックアップコードを有効にする
- これらの 2 要素認証キーで正常にログインおよびログアウトできること。
- 2 要素認証ログインを強制するサイト設定が「いいえ」に設定されていることを確認します。
管理者アカウントのユーザープロファイル設定のセキュリティタブにある標準の UI ツールを使用して、すべての 2 要素認証項目(認証アプリとセキュリティキー)を削除します。
- ログアウトします。
すべての 2 要素認証項目が削除された場合、バックアップコードはデータベースにまだ存在しており、ログイン時に 2 要素認証が無効になっているとは見なされません。
認証アプリやセキュリティキーがなくなったため、ユーザーはバックアップコードを使用できません。
すべての認証アプリとキーが削除された後、プロファイル - セキュリティでバックアップコードを削除することさえできません。
提案される修正:ユーザーから最後のセキュリティ項目が削除されたときに、バックアップコードも削除する必要があります。
回避策:データベースからこのユーザーのすべての UserSecondFactor レコードを削除します。
UserSecondFactor.where(user_id: 1).delete_all
「いいね!」 12
Discourse の新しいバージョンで修正が実装される可能性はありますか?本日、まったく同じ問題が発生し、アカウントを復旧するのが大変でした。
「いいね!」 1
ユーザーがログインできないと訴えているのと同じ問題を抱えています。このユーザーは以前、アカウントに2FAを有効にしていましたが、後に削除しました。ログインしようとすると表示されるエラーメッセージは次のとおりです。
選択された2要素認証方法は、アカウントで有効になっていません。
選択された2要素認証方法は無効です。
…そして、メールは変更/追加されません。
- このDiscordインスタレーションは「管理されている」ため、コンソールやデータベースにアクセスできません。
他に試せることはありますか?それとも、ユーザーはアカウントに永久にロックされてしまいますか?
これはひどい。
「ホストされている」Discourseインスタンスであるため、ディスコースコンソールにアクセスできません。
管理者は管理インターフェースから2FAファクトリーをクリアできる必要があります。ユーザーにパスワードを要求するのは非常にプロフェッショナルではありません。
これは明らかに解決が必要な重大なバグです。これを正式に報告し、バグ修正の進捗状況を追跡するにはどうすればよいですか?
ホストされているDiscourseインスタンスを持つオープンソースプロジェクトとして、コンソールやデータベースにアクセスできず、管理インターフェースしかありません。
実際には同意しません。2FAが無効になった場合、2FAバックアップコードは完全に無視され、まったく関係ないはずです。
これを間違った場所(最後の2FAメソッドが削除されたときに、バックアップコードを削除する)で修正することにより、ログインできずに報告を諦めた人々がまだ残っています。
実際のバグ(2FAが無効になっている場合にバックアップコードを考慮する)を修正することにより、影響を受けるすべてのユーザーに対して、すぐに100%修正され、新しいユーザーに継続的に発生しないようにするだけです。
これでうまくいきました。ユーザーがパスワードを教えてくれました。
2FAを直接無効にしてはいけません。まず以下を行う必要があります。
- すべての2FAバックアップコードを削除する
- すべての2FAバックアップコードが削除されていることを3回確認する
- それから2FAを無効にする
この方法を使用すると、実際に2FAを無効にすることができます。これは、管理者がユーザーをなりすましてこれを修正する場合だけでなく、2FAを無効にしたい通常のユーザーにとっても真実です。