我通过实施IAuthenticationAdapter
为ADFS 3.0设置自定义MFA提供程序,我想在身份验证过程中添加另一个步骤,例如,使用基于电子邮件的OTP,首先会提示用户在发送代码之前确认他或她的电子邮件地址,然后 然后 提示用户输入OTP,或者在发送之前提示用户验证某些移动数字输出SMS OTP,但是身份验证管道中的工作流程似乎非常严格,您得到BeginAuthentication
,OnError
和TryEndAuthentication
,但实施其他步骤似乎更为复杂。
到目前为止,我已经掌握了两种可能的解决方案,并且我希望听到任何人是否有任何评论或偏好,或希望更好的方式来做到这一点。
多次调用TryEndAuthentication
,传递不同的上下文来表示应使用IAdaperPresentation
呈现流程的哪个阶段。
将jQuery和其他自定义脚本作为文本资源添加到自定义提供程序程序集中,然后将它们注入到IAdapterPresentationForm.GetFormHtml
方法中以使表单动态化甚至对单独的内联AJAX调用执行MVC / Web API服务,并在向用户显示身份验证表单之前进行电子邮件验证,以便最终得到类似的内容......
这是我的自定义脚本资源(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身份验证管道是否允许这种工作流程。
我已经尝试过第二种方法,令人惊讶的是它确实有效,但是,我确信你会同意从开发人员的观点来看,它远远不够像我一样干净!
那你怎么想?我错过了一个简单的设置或界面,我可以干净地实现这个,或者这是唯一的方法吗?