グループに未知のメールを追加してSSOをバイパスする

SSOが有効になっているサイトを想定してください。

ここで説明されているインターフェースを使用して、グループに一括でユーザーを追加する場合、入力リストに含まれるメールアドレスがDiscourse上にまだ存在しない場合、招待メールが送信されます。

そのリンクをクリックすると、Discourse内のアカウント作成ページに移動します。

フォームに記入すると、アカウントが作成されます。作成されたアカウントにはSSO情報が含まれていません。

これがなぜ問題なのかは明白だと考えられます。

  • SSO認証システムを迂回することは非常に危険です。
  • 「X人のユーザーにメールが送信されます」という警告がないため、メッセージが送信されていることに気づかず、誤ってスパムメールを送信してしまいました。

期待される動作:

  • SSOが有効な状態でグループに一括追加を行う場合、サイト内に存在しないメールアドレスは無視すること。
「いいね!」 7

ご報告ありがとうございます。開発環境でこの問題を再現することができました。SSOが有効になっている場合、サイトにまだ存在しないメールアドレスをグループに追加しても、無視されるべきです。この問題は修正いたします。ご迷惑をおかけして申し訳ございません。

「いいね!」 8

PR #11950PR #11951 で修正されました。ご報告ありがとうございます!:smiley:

「いいね!」 7

このトピックは、最後の返信から24時間後に自動的に閉鎖されました。新しい返信は受け付けられていません。

@Grayden_Shand 実際、現在は招待の引き換えページで SSO 認証を追加することを検討しています。招待を引換える際、ユーザーはサインアップフォームを入力する代わりに SSO 経由で認証を行うことになります。この方式で貴社のユースケースに合致しますか?

@sam 招待フローについて考えているのですが、一つ不安な点があります。招待が送られたメールアドレスと SSO のメールアドレスが一致する必要があるかどうかです。メールベースの招待についてはこれを強制できそうですが、リンクベースの招待については難しいかもしれません。ご意見をお聞かせください。

「いいね!」 3

はい、特にアカウント承認が必要なサイトではこれを強制する必要があります。

そのため、Facebook 認証を有効にし、ローカル認証を無効にしても、ユーザーをオンボーディングできます。

ただし、招待リンクは(明確に)この制限を回避できます。なぜなら、招待リンクは特定のメールアドレスと関連付けられていないからです。

「いいね!」 1

私たちのユースケースでは、招待メールの送信自体を完全に抑制できる方がはるかに望ましいです。私たちのサイトの多く(オンラインコース向けの一時コミュニティ)では、登録期間(および参加費)が限られています。そのため、招待メールを受け取ったユーザーがサイトにアクセスした際に、もはや参加できないことを知って落胆する状況が予想されます。私たちのサイトへの招待を受け取ることを望む状況は実際には存在しません。

もしこの機能を実装されるのであれば、以下のような警告を実装していただくようお願いいたします。「あなたのサイト(bob@example.com、alice@example.com、…)のユーザーではない XX 名にメールを送信しようとしています」。これにより、該当するユーザーを特定し、一括追加リストから削除することができます。

ご用途には招待リンクのご利用は可能でしょうか?そうすればメールを送信せず、有効期限を設定することもできます。

メール送信を回避する「ニンジャモード」も一部サポートしており、多数のメールアドレスを許可リストに追加できますが、招待リンク機能であなたの要件が満たされるかどうか、興味があります。

「いいね!」 1

おそらく無理だと思いますが、もしかしたら質問の意味を正しく理解していないかもしれません。Discourse の使用方法、SSO 機能、そして私が最初にこのバグに遭遇した経緯について説明します。

私たちは、各ワークショップ(コース)のセッションごとに一時的な Discourse を使用する e ラーニングプラットフォームを運営しています。

SSO をカスタム認証システムと併用する理由は以下の 2 点です:

  1. ユーザーが登録したどのコースにもアクセスするために、一度だけ認証情報を作成すれば済むようにするため。
  2. データベース内の任意のデータに基づき、各 Discourse へのアクセスを許可するユーザーをポリシーで強制するためです。例えば、Discourse の SSO エンドポイントでは、ユーザーの有効な登録を確認し、日付が開始日と終了日の範囲内にあるかをチェックします。

このバグに遭遇したのは、あるワークショップ内だけで、別のワークショップの参加者限定のグループ(例えば卒業生グループなど)を作成したいと考えた時でした。そのため、別のワークショップのクラス名簿全体を「一括追加」モーダルに追加したところ、現在のワークショップに登録していない全員に招待メールが誤って送信されてしまいました。

つまり、私たちは Discourse の招待機能(リンクによるものもメールによるものも)を絶対に使用しないつもりです。もし招待機能が必要になったとしても、送信する招待に独自のビジネスロジックを適用したいと考えているため、おそらく自社で実装することになるでしょう。例えば、ワークショップの登録期間が終了していたら、リンクを開いた際にエラーメッセージを表示したい場合や、リンクに割引情報を埋め込みたい場合などです。

つまり、使用しなくて済むのであれば問題ないのですが、Discourse 内にアカウントを持たない人へ誤ってメールを送信してしまうことを気にする必要がないようにしたいというのが本音です。

「いいね!」 3