2017-11-09 8 views
0

私はこのような形式を持つ:1つのコントローラアクションから別のコントローラアクションに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() 

ラインを形に:

通常、私たちは私たちが通常を与えた2番目のアクションへのフォーム投稿を持っています。

しかし、私は最初のアクションに渡した別のフォームから何かをして、2番目のアクションにコントロールを渡します。

しかし、ValidateAntiForgeryTokenのattrubuteは私がこのルートに行くときにそれを壊します。

答えて

0

これはできません。反偽造トークンは、Http Cookieとフォームの隠し値の両方に基づいています。アクションリダイレクトを実行すると、そのフォーム値は失われ、したがって偽造トークンは検証できません。

あなたはアクションリダイレクトを必要としない設計を考え出す必要があります...

クレジット:-Roy Dictus

How to pass through the AntiForgeryToken to another action

関連する問題