0

を実装して ADFS 3.0 用のカスタム MFA プロバイダーをセットアップしてIAuthenticationAdapterいます。認証プロセスに別のステップを追加したいと考えています。たとえば、電子メール ベースの OTP を使用して、ユーザーはコードの前に電子メール アドレスを確認するように最初に求められます。が送信された、ユーザーは OTP を入力するように求められるか、SMS OTP を送信する前にモバイルの数字を確認するように求められる可能性がありますが、認証パイプラインのワークフローは非常に厳格に見えBeginAuthenticationます。ステップはもっと複雑なようです。OnErrorTryEndAuthentication

これまでのところ、2 つの可能な解決策がいくつかあります。コメントや好み、またはできればこれを行うためのより良い方法を誰かに聞いてみたいと思います。

  1. 複数回呼び出しTryEndAuthenticationて、異なるコンテキストを渡して、プロセスのどの段階をIAdaperPresentation.

  2. jQuery およびその他のカスタム スクリプトをテキスト リソースとしてカスタム プロバイダー アセンブリに追加し、それらをIAdapterPresentationForm.GetFormHtmlメソッドに挿入してフォームを動的にし、別の MVC / Web API サービスへのインライン AJAX 呼び出しを実行し、電子メールの検証を行います。ユーザーに認証フォームを表示する前に、次のような結果になります...

これが私のカスタム スクリプト リソース (Provider.txt) です。

            function alertMe() {
                $("#serviceResponse").html("It Works!");
            }

そして、これが私がしたことですGetFormHtml

            var jQuery2 = Properties.Resources.jQuery2;
            var script = Properties.Resources.Provider;

            result += "<script type=\"text/javascript\">";
            result += jQuery2;
            result += "</script>";
            result += "<form method=\"post\" id=\"loginForm\" autocomplete=\"off\">";
            ...
            result += "    <input id=\"alertButton\" type=\"button\" name=\"Alert\" value=\"Alert Me\" onclick=\"alertMe();\" />";
            result += "    <div id=\"serviceResponse\" />";
            ...
            result += "    <input id=\"continueButton\" type=\"submit\" name=\"Continue\" value=\"Continue\" />";
            result += "</form>";
            result += "<script type=\"text/javascript\">";
            result += script;
            result += "</script>";

最初の方法はまだ試していません。また、ADFS 認証パイプラインでこの種のワークフローが許可されるかどうかもわかりません。

私は 2 番目の方法を試してみましたが、驚くほどうまくいきました。

これを行うためにきれいに実装できる単純な設定またはインターフェイスが欠けているのでしょうか、それともこれが唯一の方法ですか?

4

0 に答える 0