zoukankan      html  css  js  c++  java
  • asp.net mvc 4 AntiForgery 提供的防伪标记适用于用户“”,但当前用户为“XX” 问题处理记录

    情景:
       某页面未登录下可以访问,但具体操作时发现未登录就弹出登录窗,待完成登录后继续操作。
      当登录成功,前端继续操作(post后端接口)时发现以下错误:
         提供的防伪标记适用于用户“”,但当前用户为“XX”。
      (登录以及具体页面操作都是ajax post)
     
    看到这个错误后先是这么处理:
            
                   //登录代码。。。    
                   string oldCtoken = HttpContext.Request.Cookies["__RequestVerificationToken"].Value;
                    string ctoken;
                    string ftoken;
                    AntiForgery.GetTokens(oldCtoken, out ctoken, out ftoken); //生成新token
                    HttpContext.Request.Cookies.Set( new HttpCookie ("__RequestVerificationToken", ctoken));
                    return Content(ftoken); //返回,前端收到后设置 hidden token
    但是发现虽然使用了新的cookie token 、 form token ,但是还是提示用户不对。
    接着研究源码。。。通过研究源码发现:生成token的时候 会取当前用户identity。 (之前有遇到登录后,identity 不会刷新,所以解决方案很明显了)
     
     string[] roles = new string [] { "Role1", "Role2" }; //具体情况设置
                    HttpContext.User =
                       new GenericPrincipal (new GenericIdentity( "XX"), roles);  //用户名具体设置
     
     
                    //这样也是可以的
                    //ftoken = AntiForgery.GetHtml().ToString();
                    //Regex r = new Regex(@"value=""([^""]+)");
                    //var m = r.Match(ftoken);
                    //return Content(m.Groups[1].Value);
  • 相关阅读:
    redis的常用命令及php-redis的使用
    mysql数据库基本操作
    php接口数据安全解决方案
    如何防止api接口被恶意调用或攻击
    virtualBox安装及调试
    PHP常用扩展
    memcached安装与应用
    Jmeter的基础使用(4)——添加服务器的监控
    Jmeter的基础使用(3)——使用实操
    Jmeter的基础使用(2)——线程的添加以及基本使用
  • 原文地址:https://www.cnblogs.com/jiangzhen/p/3870925.html
Copyright © 2011-2022 走看看