2016-06-17 8 views
0

이것은 바보 같은 질문 일지 모르지만 나는 이것에 대해 잠시 생각해 봤습니다. 어쩌면이 모든 것이 어떻게 작동하는지에 대한 세부 사항을 잊어 버렸을 것입니다. 물론이 시나리오를 테스트하지 않았습니다.ajax 호출 및 IsAjaxRequest() 메서드에서 MVC의 AntiForgeryToken

물론
[HttpPost] 
[ValidateAntiForgeryToken] 
public JsonResult greetingMsg(string name, string timeOfDay) 
{ 
    if (!Request.IsAjaxRequest()) return null; 
    return Json(new { result = $"Hello {name}, good {timeOfDay}" }); 
} 

, 우리는 Ajax 호출에 AntiForgeryToken를 보내야한다, 또는이 메소드는 실행되지 않습니다 :

이처럼 ASP.NET MVC 프로젝트에 간단한 JsonResult 액션 예를 상상해보십시오.

이 JsonResult 메서드는 웹의 어느 곳에서나 호출 될 수 있지만 AntiForgeryToken이 일치하지 않아 실패합니다. 맞습니까? 좋습니다. [ValidateAntiForgeryToken] 속성을 제거하면 Ajax를 사용하여 웹 사이트에서 호출 할 때 메서드가 실행됩니까? 아니면 Ajax 호출이 동일한 웹 내에서 호출 될 때만 성공할 수 있습니까?

감사합니다.

답변

0

AntiForgeryToken을 제거하면 어느 곳에서나 작동합니다. 출처를 확인하는 핸들러 나 다른 보안 메커니즘을 위임하여 애플리케이션을 제한하지 않는 한. 그러나 당신은 또한 그것을 속일 수 있습니다.

AntiForgeryToken을 요청한 비슷한 문제에 대한 해결책을 찾아야했지만 순수 자바 스크립트 SPA를 만들었으므로 ASP.NET MVC (서버의 웹 API와 다른 서버의 SPA)가 필요하지 않았습니다. 안전하게 작동하게하는 유일한 방법은 OAuth2 JWT를 도입하는 것이 었습니다. (발급자가 JsonWebToken에 대한 토큰 내에서 서명되었으므로 위조 할 수 없음) API를 호출하려는 사람은 토큰을 가져올 수 있어야합니다.

관련 문제