具有自定义ADFS 3.0 IAuthenticationAdapter的多步MFA

时间:2014-09-24 11:02:46

标签: authentication claims-based-identity adfs two-factor-authentication

我通过实施IAuthenticationAdapter为ADFS 3.0设置自定义MFA提供程序,我想在身份验证过程中添加另一个步骤,例如,使用基于电子邮件的OTP,首先会提示用户在发送代码之前确认他或她的电子邮件地址,然后 然后 提示用户输入OTP,或者在发送之前提示用户验证某些移动数字输出SMS OTP,但是身份验证管道中的工作流程似乎非常严格,您得到BeginAuthenticationOnErrorTryEndAuthentication,但实施其他步骤似乎更为复杂。

到目前为止,我已经掌握了两种可能的解决方案,并且我希望听到任何人是否有任何评论或偏好,或希望更好的方式来做到这一点。

  1. 多次调用TryEndAuthentication,传递不同的上下文来表示应使用IAdaperPresentation呈现流程的哪个阶段。

  2. 将jQuery和其他自定义脚本作为文本资源添加到自定义提供程序程序集中,然后将它们注入到IAdapterPresentationForm.GetFormHtml方法中以使表单动态化甚至对单独的内联AJAX调用执行MVC / Web API服务,并在向用户显示身份验证表单之前进行电子邮件验证,以便最终得到类似的内容......

  3. 这是我的自定义脚本资源(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身份验证管道是否允许这种工作流程。

    我已经尝试过第二种方法,令人惊讶的是它确实有效,但是,我确信你会同意从开发人员的观点来看,它远远不够像我一样干净!

    那你怎么想?我错过了一个简单的设置或界面,我可以干净地实现这个,或者这是唯一的方法吗?

0 个答案:

没有答案