2

要求是:

会话清除后,将用户返回主页,并使用 Windows 身份验证提示强制他们重新登录。

现在的情况:

我有一个 javascript 倒数计时器,当它达到 0 时,会发送一个警报,说会话结束。我想要做的是通过Javascript或回发到服务器,清除用户的凭据

我读过/尝试过的内容:

AJAX 发布到服务器设置 HttpContext.Response,并抛出 HttpException(401)

    [HttpPost]
    public ActionResult ForceRelogin()
    {
        //HttpContext.Response.StatusCode = 401;
        //HttpContext.Response.End();
        //return RedirectToAction("Index", "Home");
        //throw new HttpException(401, "");
        return new HttpStatusCodeResult(HttpStatusCode.Unauthorized);
    }

这些似乎都不适用于 AJAX,而且我不确定如何将常规帖子发送回不涉及提交的控制器操作。

问题:

如何在不使用 Active-X 或更改其 IE 设置的情况下强制用户重新验证其 Windows 身份验证凭据?奖励问题:如何在不使用提交或 AJAX 的情况下从 javascript 回发到 MVC 控制器操作?

4

1 回答 1

0

以下是我评论的一些例子。


如果您可以摆脱 GET 请求 -

控制器:

[HttpGet]
public ActionResult ForceRelogin()
{
    // Would you maybe just throw a new unauthorized HttpException exception?
    // throw new HttpException(401, "Forbidden");
    // But try to invalidate the session and then do a redirect to the login page
    return new HttpStatusCodeResult(HttpStatusCode.Unauthorized);
}

Javascript:

<script type="text/javascript">
   ...

   var redirectToLogin = function() { 
      window.location.href = "http://foo.com/login/ForceRelogin";
   }

   ...
</script>

或者,如果您需要使用 POST 执行此操作,请执行以下操作:控制器:

[HttpPost]
public ActionResult ForceRelogin()
{
    // Would you maybe just throw a new unauthorized HttpException exception?
    // throw new HttpException(401, "Forbidden");
    // But try to invalidate the session and then do a redirect to the login page
    return new HttpStatusCodeResult(HttpStatusCode.Unauthorized);
}

Javascript和HTML:

<script type="text/javascript">
   ...

   var redirectToLogin = function() { 
      var form = document.getElementById("formFoo");
      form.submit();
   }

   ...
</script>

<form id="formFoo" action="http://foo.com/login/ForceRelogin">
   ...
</form>

我不完全确定您将如何使用户会话无效?返回未经授权的错误代码可能会帮助您重定向到登录页面,但用户可以按后退按钮,然后继续浏览。如果这不是您关心的问题,那么您也可以直接将用户重定向到登录页面。我确实找到了这篇文章,也许您可​​能需要遵循类似的方法,基本上它涉及发送无效的登录尝试:Logging a user out when using HTTP Basic authentication

于 2013-05-29T12:59:34.390 回答