我正在通过实施为 ADFS 3.0 设置自定义 MFA 提供程序IAuthenticationAdapter
,我想在身份验证过程中添加另一个步骤,例如使用基于电子邮件的 OTP,首先提示用户在代码之前确认他或她的电子邮件地址发送,然后提示用户输入 OTP,或者可能提示用户在发送 SMS OTP 之前验证一些移动数字,但是身份验证管道中的工作流程似乎非常僵化,你得到和BeginAuthentication
,但实现了额外的步骤似乎更多。OnError
TryEndAuthentication
到目前为止,我已经提出了两种可能的解决方案,我想听听是否有人有任何意见或偏好,或者希望有更好的方法来做到这一点。
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 身份验证管道是否允许这种工作流程。
我已经尝试了第二种方法,并且令人惊讶的是它确实有效,不过,我相信你会同意,从开发人员的角度来看,它远没有我想要的那么干净!
那么你怎么看,我是否缺少一个简单的设置或界面,我可以干净地实现这一点,或者这是唯一的方法?