programing

MVC 4에서 위조 방지 쿠키 토큰과 폼 필드 토큰이 일치하지 않습니다.

css3 2023. 9. 12. 20:10

MVC 4에서 위조 방지 쿠키 토큰과 폼 필드 토큰이 일치하지 않습니다.

ASP의 기본 로그인 모듈을 사용하고 있습니다.NET MVC 4.저는 기본 어플리케이션에서 코드를 변경하지 않았고 공유 서버에서 호스팅했습니다.

기본 로그인 페이지를 사용하여 로그인한 후한동안 브라우저를 유휴 상태로 유지했습니다.그런 다음 애플리케이션이 다음과 같이 컨트롤러 작업을 수행하려고 할 때 로그인 페이지로 리디렉션되었습니다.[Authorize]기여하다.

그런 다음 다시 로그인을 시도하는데 로그인 버튼을 클릭하면 오류가 발생합니다.

The anti-forgery cookie token and form field token do not match.

enter image description here

로그인 작업

// POST: /Account/Login

        [HttpPost]
        [AllowAnonymous]
        [ValidateAntiForgeryToken]
        public ActionResult Login(LoginModel model, string returnUrl)
        {
            if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
            {
                return RedirectToLocal(returnUrl);
            }

            // If we got this far, something failed, redisplay form
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
            return View(model);
        }

web.config에 명시적으로 기계키를 추가하여 문제를 해결하였습니다.

참고: 보안상의 이유로 이 키를 사용하지 마십시오.https://support.microsoft.com/en-us/kb/2915218#AppendixA 에서 생성합니다.온라인 원을 사용하지 마십시오. 자세한 내용은 http://blogs.msdn.com/b/webdev/archive/2014/05/07/asp-net-4-5-2-and-enableviewstatemac.aspx

 <machineKey validationKey="971E32D270A381E2B5954ECB4762CE401D0DF1608CAC303D527FA3DB5D70FA77667B8CF3153CE1F17C3FAF7839733A77E44000B3D8229E6E58D0C954AC2E796B" decryptionKey="1D5375942DA2B2C949798F272D3026421DDBD231757CA12C794E68E9F8CECA71" validation="SHA1" decryption="AES" />

고유한 기계 키를 생성하는 사이트는 다음과 같습니다.

http://www.developerfusion.com/tools/generatemachinekey/

이 오류가 발생하는 또 다른 이유는 브라우저에 의해 캐시되지 않은 [Authorize] 영역 사이로 이동하는 경우입니다(예를 들어 사용자가 로그아웃할 때 보호된 콘텐츠를 볼 수 없도록 차단하기 위해 의도적으로 수행한 것입니다).

그런 경우에는 캐시되지 않은 작업을 수행할 수 있으므로 누군가가 뒤로 단추를 클릭하여 @Html로 된 양식을 사용하게 됩니다.위조방지토큰() 이전부터 토큰이 캐시되지 않습니다.

[NoCache] ActionFilterAttribute를 추가하는 방법은 이 게시물을 참조하십시오.양식 제출 ASP 처리방법NET MVC Back 버튼?

@Html을 넣었는지 확인합니다.위조방지페이지 양식의 토큰()

저는 오랫동안 이 문제를 가지고 있었고 ASP에 문제가 있다고 생각했습니다.그물.

실제로는 서버였습니다.그때 WinHost와 같이 있었는데 200MB의 메모리 제한이 있습니다.동시에 ~20명의 사용자가 들어오자마자 한계에 다다랐습니다.이 시점에서 모두 로그아웃되어 이러한 문제를 해결할 수 있었습니다.

저는 버튼 태그를 이용해서 양식을 제출한 것이 원인이었습니다.입력 제출 태그로 변경하면 문제가 해결됩니다.

내 경우 "사이트 캐시가 활성화되어 있었고, 이 "위조 방지" 토큰 값이 캐시 양식을 제거한 후 매번 업데이트되지 않는 것을 발견했습니다."

저의 경우 도메인 사이트와 하위 도메인 사이트별로 설정된 여러 개의 쿠키 값과 관련이 있었습니다.

  • main.com set __RequestVerification토큰 = 1
  • sub.main.com set __RequestVerification토큰 = 2

그러나 sub.main.com 으로 요청이 전송되었을 때 __RequestVerification을 사용했습니다.main.com 의 토큰 = 1개 값

언급URL : https://stackoverflow.com/questions/18097401/the-anti-forgery-cookie-token-and-form-field-token-do-not-match-in-mvc-4