以下の手順に従うことで、AWS Cognito を介した SSO を有効化できました:
- Discourse OpenID Connect (OIDC)
- Anyone have a working AWS Cognito configuration w/ ouath2, openid or sso?
ただし、当社のモバイルアプリおよび Web アプリで採用している認証フローを Discourse 上でも実現する方法を探っています。具体的には、パスワードレスログイン(ユーザーがメールアドレスを入力し、認証コードを受け取る)というカスタム認証フローです。
メインアプリではパスワードを使用していないため、SSO もこのパスワードレス認証フローを通じて機能することが期待されます。
この機能を実現する方法、あるいは実現可能かどうかについて、ご教示いただけますでしょうか。
よろしくお願いいたします。
pfaffman
(Jay Pfaffman)
2
何か見落としているのでなければ、それは機能するはずです。リンクを送信してもらうために必要な場所に移動させれば、Discourse にログインできるはずです。それでもうまくいかないのでしょうか?それとも、Discourse 側からリンクの送信を依頼する場所へ誘導させたいのでしょうか?
Jay さん、こんにちは。
返信ありがとうございます。
clarification させてください。
当社のアプリ(Discourse ではありません)のフローはパスワードレスです。ユーザーがメールアドレスを入力 → メールで 6 桁のコードを受け取る → コードを入力 → ログイン、という流れです。
この機能を有効にするため、認証チャレンジを定義・作成および検証する Lambda トリガーを実装しています。また、UI はカスタムです(AWS Amplify が提供するものではありません)。
私たちが目指しているのは、Discourse のログインプロセスもこれと同じにすることです。Discourse に対して同じ Cognito アプリクライアント設定を使用しようと試みましたが、以下のエラーページが表示されてしまいます。
(Cognito からのネットワーク呼び出しでは、このエラーについてあまり役に立つ情報が得られていません)
これに興味がある方のために、追記します。
私たちは、この投稿に触発されて、トークンの処理を行う中間 OAuth サーバーをセットアップする必要がありました。
https://medium.com/@scott_84836/adding-aws-cognito-authentication-to-discourse-using-oauth2-basic-f20209ba6162
バックエンドに Flask/Python を使用していたため、最終的にこちらを採用しました:python-oauth2 · PyPI
要約すると:Cognito を使用して、デフォルトの手段ではパスワードレスの設定を行うことができないため、軽量な OAuth を自社で構築する必要がありました。