Asp.net mvc 告诉MVC5用户已通过Active Directory登录/注销

Asp.net mvc 告诉MVC5用户已通过Active Directory登录/注销,asp.net-mvc,login,active-directory,asp.net-mvc-5,Asp.net Mvc,Login,Active Directory,Asp.net Mvc 5,我正在构建一个仅用于内部网设置的MVC5站点。由于这里的员工在工作时共享PC,我需要将登录/注销功能合并到站点中。应用程序将根据Active Directory进行身份验证 我这里的身份验证正在工作。但是,当页面将用户带回返回URL时,user.Identity.IsAuthenticated和Request.IsAuthenticated都为false。这导致主页仍然提供“登录”选项,即使他们之前已经成功地通过了该动议 我如何告诉MVC用户已成功登录 来自Web.config: <aut

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

我这里的身份验证正在工作。但是,当页面将用户带回返回URL时,
user.Identity.IsAuthenticated
Request.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.");
            }
        }
    }

我不确定您的ntlm身份验证方法是否正确。 基本上,您可以向站点添加“以不同用户身份登录”按钮,并向其添加事件处理程序,该按钮将返回到用户401响应,而用户401响应将在客户端上触发windows登录弹出窗口以输入凭据。
请查看帖子。

您可以使用HttpUnauthorizedResult在MVC中返回401。您可以使用response.AppendHeader添加响应标头
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);
}