0

我正在构建一个仅用于 Intranet 设置的 MVC5 站点。由于这里的员工在工作时共享 PC,因此我需要将登录/注销功能合并到站点中。该应用程序将针对 Active Directory 进行身份验证。

我在这里进行了身份验证。但是,当页面将用户带回 returnUrl 时,两者User.Identity.IsAuthenticatedRequest.IsAuthenticated都是 false。这导致主页仍然提供“登录”选项,即使他们之前已经成功完成了该动作。

如何告诉 MVC 用户已成功登录?

从 Web.config:

<authentication mode="Windows" />

从帐户控制器:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        using (var pc = new PrincipalContext(ContextType.Domain))
        {
            if (pc.ValidateCredentials(model.UserName, model.Password, ContextOptions.Negotiate | ContextOptions.SimpleBind))
            {
                FormsAuthentication.SetAuthCookie(model.UserName, false);
                return RedirectToLocal(returnUrl);
            }
            else
            {
                ModelState.AddModelError("", "Invalid username or password.");
            }
        }
    }

更新 默认 MVC 代码为标准 Internet 登录创建此方法。我试图弄清楚如何生成一个ClaimsIdentity对象,以便我也可以利用它。

private async Task SignInAsync(ApplicationUser user, bool isPersistent)
{
    AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
    var identity = await UserManager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie);
    AuthenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = isPersistent }, identity);
}
4

1 回答 1

0

我不确定您是否以正确的方式进行 ntlm 身份验证。基本上,您可以将“以不同用户身份登录”按钮添加到您的站点和事件处理程序,这将返回给用户 401 响应,这反过来将在客户端上触发 Windows 登录弹出窗口以输入凭据。请看一下这篇文章。

于 2013-11-14T18:45:45.723 回答