加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 如何在单个页面中使用两个AntiForgeryToken而不

发布时间:2020-12-16 03:49:14 所属栏目:asp.Net 来源:网络整理
导读:如何在一个页面中使用多个@ Html.AntiForgeryToken()? 当我把它放在远程主机上不起作用,只在本地! 我试图使用不同的字符串foreach伪造令牌 @ Html.AntiForgeryToken(“logoff_forgery”)但是当我在控制器中添加[ValidateAntiForgeryToken(Salt =“logoff_f
如何在一个页面中使用多个@ 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:projectscodesanappCodeSanCodeSanControllersAccountController.cs 
   289  35  CodeSan

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

解决方法

正如它在描述中所述,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();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读