如何从我的自定义SSO应用程序验证用户对ADFS

时间:2018-04-05 05:51:39

标签: model-view-controller single-sign-on adfs2.0

我有点困惑。我在我的应用程序的应用程序上创建一个单一的标志。所以流程是当用户尝试访问example.com的登录控制器时,我将用户重定向到我的SSO应用程序

 FederatedAuthentication.WSFederationAuthenticationModule.RedirectToIdentityProvider("example.com", "example.com", true);

并在此应用程序中显示一个登录页面,用户可以在其中输入UserName和Password.So现在我想根据我ADFS的这些凭据验证用户。但是我很困惑如何做到这一点

这是我的登录页面

@using SingleSignOn.Models

@model LoginModel

@{
    ViewBag.Title = "Login";
}

<h2>Login</h2>

@using (Html.BeginForm(new { returnUrl = ViewBag.ReturnUrl }))
{
    @Html.ValidationSummary()

    <div class="left">
        @Html.LabelFor(m => m.Username)
    </div>
    <div>
        @Html.EditorFor(m => m.Username)
    </div>

    <div class="left">
        @Html.LabelFor(m => m.Password)
    </div>
    <div>
        @Html.EditorFor(m => m.Password)
    </div>

    <div class="left"></div>
    <div>
        <input type="submit" value="Login" />
    </div>
}

这是我的Post方法,它使用表单身份验证,但我必须在这里使用ADFS身份验证。

 [HttpPost]
    public ActionResult Index(LoginModel loginModel, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            if (loginModel.Username == "user" && loginModel.Password == "password")
            {
                FormsAuthentication.SetAuthCookie(loginModel.Username, true);
                return Redirect(returnUrl);
            }
            else
            {
                ModelState.AddModelError("", "The username or password provided is incorrect.");
            }
        }

        ViewBag.ReturnUrl = returnUrl;

        return View(loginModel);
    }

这是我的索引方法,希望在用户中接收索赔,然后重定向到example.com

 public ActionResult Index()
    {
        if (User.Identity.IsAuthenticated)
        {
            var action = Request.QueryString[Action];

            if (action == SignIn)
            {
                var formData = ProcessSignIn(Request.Url, (ClaimsPrincipal)User);
                return new ContentResult() { Content = formData, ContentType = "text/html" };
            }
            else if (action == SignOut)
            {
                ProcessSignOut(Request.Url, (ClaimsPrincipal)User, (HttpResponse)HttpContext.Items["HttpResponse"]);
            }
        }

        return View();
    }

1 个答案:

答案 0 :(得分:0)

ADFS不允许自定义登录页面。 ADFS本身在您重定向到它时提供登录页面,并在使用SAML令牌成功验证后返回。

example适用于Azure AD,但说明了原则。

只需使用ADFS元数据地址。