2

要件は次のとおりです。

セッションがクリアされたら、ユーザーをホームページに戻し、Windows 認証プロンプトを使用して強制的に再ログインさせます。

現在の状況:

0 になると、セッションが終了したことを示すアラートを送信する JavaScript カウントダウン タイマーがあります。私ができるようにしたいのは、Javascriptまたはサーバーへのポストバックを介して、ユーザーの資格情報をクリアすることです

私が読んだ/試したこと:

HttpContext.Response を設定するサーバーへの AJAX ポスト、および 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 でそれを行う必要がある場合は、次のようにします。 Controller:

[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>

ただし、ユーザーセッションを無効にする方法は完全にはわかりませんか? 許可されていないエラー コードを返すと、ログイン ページにリダイレクトするのに役立つ場合がありますが、ユーザーが [戻る] ボタンを押して、閲覧を続ける可能性があります。これが問題にならない場合は、ユーザーをログイン ページに直接リダイレクトすることもできます。私はこの投稿を見つけましたが、おそらく同様のアプローチに従う必要があるかもしれません.

于 2013-05-29T12:59:34.390 に答える