'Login as another user' MVC 4 Windows Authentication

后端 未结 3 1950
误落风尘
误落风尘 2020-12-08 05:38

I have an intranet project written in MVC 4 which uses Windows Authentication to authorise and authenticate users.

I need to add a \'Login as another user\' function

3条回答
  •  情书的邮戳
    2020-12-08 06:14

    People reverse engineered\decompiled some code from Sharepoint that happens to have this feature.

    I tested it in an ASP.NET MVC 5 app and it's working as expected.

    The code is based on decompiling the Microsoft.TeamFoundation.WebAccess which has the "Sign in as a different User" function.

    public ActionResult LogOut()
    {
        HttpCookie cookie = Request.Cookies["TSWA-Last-User"];
    
        if(User.Identity.IsAuthenticated == false || cookie == null || StringComparer.OrdinalIgnoreCase.Equals(User.Identity.Name, cookie.Value))
        {
            string name = string.Empty;
    
            if(Request.IsAuthenticated)
            {
                name = User.Identity.Name;
            }
    
            cookie = new HttpCookie("TSWA-Last-User", name);
            Response.Cookies.Set(cookie);
    
            Response.AppendHeader("Connection", "close");
            Response.StatusCode = 401; // Unauthorized;
            Response.Clear();
            //should probably do a redirect here to the unauthorized/failed login page
            //if you know how to do this, please tap it on the comments below
            Response.Write("Unauthorized. Reload the page to try again...");
            Response.End();
    
            return RedirectToAction("Index");
        }
    
        cookie = new HttpCookie("TSWA-Last-User", string.Empty)
        {
            Expires = DateTime.Now.AddYears(-5)
        };
    
        Response.Cookies.Set(cookie);
    
        return RedirectToAction("Index");
    
    }
    

    Source:

    Force Sign in as a different user while using Windows Authentication in asp.net

提交回复
热议问题