如何在一个页面中使用两个AntiForgeryToken而不使用已弃用的' Salt'属性

时间:2014-07-07 14:45:37

标签: asp.net-mvc antiforgerytoken

如何在一个页面中使用多个@Html.AntiForgeryToken()

当我把它放在远程主机上不起作用时,只在本地!

我尝试使用不同的字符串foreach伪造令牌 @Html.AntiForgeryToken("logoff_forgery")但是当我在控制器中添加[ValidateAntiForgeryToken(Salt = "logoff_forgery")]时,我收到以下错误

  'System.Web.Mvc.ValidateAntiForgeryTokenAttribute.Salt' 
   'The 'Salt' property is deprecated. 
   To specify custom data to be embedded within the token, 
   use the static AntiForgeryConfig.AdditionalDataProvider property.'   
   D:\projects\codesan\app\CodeSan\CodeSan\Controllers\AccountController.cs 
   289  35  CodeSan

有谁知道如何使用静态AntiForgeryConfig.AdditionalDataProvider?如果是,请与我分享。

1 个答案:

答案 0 :(得分:3)

正如描述Salt中所述,不推荐使用属性。

以下是IAntiForgeryAdditionalDataProvider

的简单实现
public class MyAntiForgeryAdditionalDataProvider : IAntiForgeryAdditionalDataProvider
{
    public string GetAdditionalData(HttpContextBase context)
    {
        return GenerateTokenAndSaveItToTheDB();
    }

    public bool ValidateAdditionalData(HttpContextBase context, string additionalData)
    {
        Guid token = Guid.TryParse(additionalData, out token) ? token : Guid.Empty;
        if (token == Guid.Empty) return false;

        return GetIfTokenIsFoundInTheDBAndNotExpired(token);
    }

    private string GenerateTokenAndSaveItToTheDB()
    {
        var newToken = Guid.NewGuid().ToString();
        //save it to the db
        return newToken;
    }
}

您只需在Global.asax.cs

中注册即可
protected void Application_Start()
{
    AntiForgeryConfig.AdditionalDataProvider = new MyAntiForgeryAdditionalDataProvider();
}