asp.net-mvc - 現在のユーザーではなく別のクレームベースのユーザー用です - 指定された偽造防止トークンはユーザー 用でしたが、現在のユーザーは です。




提供されたMVC 4は、偽造防止トークンがユーザ ""用であったが、現在のユーザは ""ユーザ用 " (2)

私は最近、 MVC 4Entity Framework 5を使って構築されたWebアプリケーションをLiveに入れました。 MVCアプリケーションは、 Razor Viewsを使用します。

Elmahを使用して、ユーザーがアプリケーションにログインしているときに、次のエラーが表示されることがあることにお気づきになりました

The provided anti-forgery token was meant for user "" but the current user is "user"

私はこの問題を解決する方法について既に少しの研究をしてきましたが、何も私にとってはうまくいかないようです。 下記のログインビューと対応するコントローラアクションを参照してください。

剃刀の眺め

@if (!HttpContext.Current.User.Identity.IsAuthenticated)
{

using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

     <div class="formEl_a">

        <fieldset>
            <legend>Login Information</legend>

            <div class="lbl_a">
                Email
            </div>
            <div class="editor-field">
                @Html.TextBoxFor(m => m.Email, new { @class = "inpt_a" })<br />
                @Html.ValidationMessageFor(m => m.Email)
            </div>

            <div class="lbl_a">
                @Html.LabelFor(m => m.Password)
            </div>
            <div class="editor-field sepH_b">
                @Html.PasswordFor(m => m.Password, new { @class = "inpt_a" })<br />
                @Html.ValidationMessageFor(m => m.Password)
            </div>


        </fieldset>
    </div>
    <br />
      <p>
            <input type="submit" value="Log In" class="btn btn_d sepV_a" />
        </p>

}    
}

コントローラ

[AllowAnonymous]
public ActionResult Login()
{
     return View();
}

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
     if (ModelState.IsValid && _accountService.Logon(model.Email, model.Password, true))
     {
          //Validate
     }
     else
     {
          // inform of failed login
      }

}

私はこれがすべて見えたと思ったが、依然としてエラーは続く。 どのようにこの問題を解決するためのアイデアを持っていますか?

あなたの助けが大変ありがとうございます。

ありがとう。


AntiForgeryTokenに対して実行される検証コードは、ログインしたユーザーの資格情報が変更されていないこともチェックします。これらは、Cookieでも暗号化されています。 これは、ポップアップや他のブラウザタブでログインまたはログアウトすると、次の例外を除いてフォームの送信が失敗することを意味します。

System.Web.Mvc.HttpAntiForgeryException (0x80004005):
The provided anti-forgery token was meant for user "", but the current user is "SomeOne".

これをオフにするには、 AntiForgeryConfig.SuppressIdentityHeuristicChecks = true;AntiForgeryConfig.SuppressIdentityHeuristicChecks = true; Global.asaxファイル内のApplication_Startメソッド。

AntiForgeryTokenがあなたのウェブサイトを検証しないと、 System.Web.Mvc.HttpAntiForgeryException型の例外がスローされます。 少なくとも、HttpAntiForgeryExceptionをキャッチすることで、これらの例外をターゲットにしたより有益なページをユーザーに与えることで、これを少し簡単にすることができます。

private void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError();

    if (ex is HttpAntiForgeryException)
    {
        Response.Clear();
        Server.ClearError(); //make sure you log the exception first
        Response.Redirect("/error/antiforgery", true);
    }
}

詳細情報:

反偽造トークンはユーザー ""用ですが、現在のユーザーは "username"です。

Html.AntiForgeryToken - 使いやすさとセキュリティのバランス






antiforgerytoken