を実装して ADFS 3.0 用のカスタム MFA プロバイダーをセットアップしてIAuthenticationAdapter
います。認証プロセスに別のステップを追加したいと考えています。たとえば、電子メール ベースの OTP を使用して、ユーザーはコードの前に電子メール アドレスを確認するように最初に求められます。が送信された後、ユーザーは OTP を入力するように求められるか、SMS OTP を送信する前にモバイルの数字を確認するように求められる可能性がありますが、認証パイプラインのワークフローは非常に厳格に見えBeginAuthentication
ます。ステップはもっと複雑なようです。OnError
TryEndAuthentication
これまでのところ、2 つの可能な解決策がいくつかあります。コメントや好み、またはできればこれを行うためのより良い方法を誰かに聞いてみたいと思います。
複数回呼び出し
TryEndAuthentication
て、異なるコンテキストを渡して、プロセスのどの段階をIAdaperPresentation
.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 番目の方法を試してみましたが、驚くほどうまくいきました。
これを行うためにきれいに実装できる単純な設定またはインターフェイスが欠けているのでしょうか、それともこれが唯一の方法ですか?