我有点困惑。我在我的应用程序的应用程序上创建一个单一的标志。所以流程是当用户尝试访问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();
}
答案 0 :(得分:0)