4

我一直在搜索一整天,我找不到解决方案。

我正在为 Intranet 应用程序使用 Windows 身份验证。我希望能够单击链接并以其他用户身份登录,类似于 SharePoint 中的选项。

我已经看到了许多基于 .net 的 SO 上提出的解决方案,但没有特定于 MVC。

我遇到了 HttpUnauthorizedResult

return new HttpUnauthorizedResult();

这会强制用户登录,但我不相信您可以在登录后重定向。

我也试过

Response.StatusCode = 401;
Response.StatusDescription = "Unauthorized";
Response.SuppressContent = true;
HttpContext.Current.ApplicationInstance.CompleteRequest();

经过三次尝试后,我收到 HTTP 错误 401.0 - 未经授权

这篇文章是我找到的最详细的文章,但是它不是专门针对 mvc 的,我尝试修改它失败了。

http://www.roelvanlisdonk.nl/?p=825

有没有人让这个工作,或者你能指出我正确的方向。

我对跨浏览器解决方案感兴趣,因为我们的一些用户使用 iPad 等。

4

2 回答 2

3

我对这个问题的解决方法是创建一个“SignInAsDifferentUser”公共方法(操作)并创建一个会话变量来指示我以前是否访问过这个方法。第一次访问会将一个会话变量(IsEntered)设置为true并返回HttpUnauthorizedResult()。用户输入新凭据后,您将返回此方法。但是会话已经设置为 true。因此,您将被重定向到 Index 方法。我希望这有帮助。

public ActionResult SignInAsDifferentUser()
{

        if ((bool)(Session["IsEntered"] ?? false))
        {
            // already entered...
            Session["IsEntered"] = false;
            return RedirectToAction("Index", "Home");
        }
        else
        {
            Session["IsEntered"] = true;                
            return new HttpUnauthorizedResult();
        }

}
于 2014-09-10T23:59:48.893 回答
0

我需要在带有 Web 表单的经典 ASP.net 中执行此操作。我想这同样适用于 MVC。我必须创建一个 Active Directory 库才能以“交互式”用户身份登录,并将网站设置为身份模拟。为此,您需要访问 Win32 库调用。如果您仍然感兴趣,我可以在 Codeplex 或其他东西中构建一个示例。

于 2014-04-16T12:53:55.667 回答