2017-11-09 8 views
0

나는 형태로 다음과 같이 있습니다 다음과 같습니다 컨트롤러 액션에한 컨트롤러 액션에서 다른 컨트롤러 액션으로 AntiForgeryToken을 전달하는 방법은 무엇입니까?

using (Html.BeginForm("MockEcaCertLogin", "Authentication", new { area = "Login" }, FormMethod.Post)) 
    { 
     @Html.ValidationSummary(true) 
     @Html.AntiForgeryToken() 
     <div class="well"> 
      <h1 class="bg-danger" style="padding:3px; border: 1px solid black">Mock ECA Login</h1> 
      <div class="margin-bottom-20 margin-top-20"> 

       @Html.DropDownList("CertName", new List<SelectListItem>() 
      { 
       new SelectListItem() { Text = "First Last", Value = "First .Last.M.CCCDDDDDDDDDD.ID" }, 
       new SelectListItem() { Text = "First Last", Value = "First Last" }, 
      }) 

       <button type="submit" class="btn btn-default">Login</button> 

      </div> 
     </div> 
    } 

이 양식 게시물 :

 [HttpPost, ValidateAntiForgeryToken, ValidateModelState] 
     public void MockEcaCertLogin(string certName) 
     { 
      var urlHelper = new UrlHelper(this.HttpContext.Request.RequestContext); 
      var destinationUrl = urlHelper.Action("Login", "Authentication"); 

      var headers = new NameValueCollection(); 
      headers.Add("X-ARR-ClientCert", certName); 
      HttpContext.Server.TransferRequest(destinationUrl, true, "POST", headers); 
     } 

그래서 양식 게시물 컨트롤러 액션에 ValidateAntiForgery 토큰을.

//[HttpPost, ValidateAntiForgeryToken, ValidateModelState] 
    [HttpPost, ValidateModelState] 
    public ActionResult Login() 
    { 
     var certificateName = GetCertificate(); 

가 어떻게 다음 일에 첫 번째 작업에서 AntiForgeryToken를 전달하거나 전달하는 새로운 하나를 만들 수 있습니다 그리고 작업이 작업에 전송 요청을합니까?

는 일반적으로 우리는 두 번째 작업에 양식을 게시 그래서 우리는 정상을 준이 : 형태

@Html.AntiForgeryToken() 

라인.

하지만 첫 번째 액션으로 넘어가 다른 액션으로 컨트롤을 전달하는 다른 폼에서 뭔가를하고 있습니다.

그러나이 경로를 탐색 할 때 ValidateAntiForgeryToken attrubute가이를 깨뜨립니다.

답변

0

해당 사항 없음. 위조 토큰은 Http 쿠키와 양식의 숨겨진 값을 기반으로합니다. 액션 리디렉션을 수행 할 때 양식 값이 손실되고 따라서 위조 토큰을 확인할 수 없습니다.

당신은 액션 리디렉션을 필요로하지 않는 디자인을 마련 할 필요가 ...

제공 : -Roy Dictus

How to pass through the AntiForgeryToken to another action