ASP.NET Core角色认证加[ValidateAntiForgeryToken]后返回HTTP 400问题排查
你的判断是正确的,该400错误确实由RedirectToAction("Cabinet", "Cabinet")触发。
错误原因
[ValidateAntiForgeryToken]是ASP.NET Core内置的CSRF(跨站请求伪造)防护特性,默认要求请求中携带与用户身份对应的防伪造令牌,令牌通常由前端页面对应表单生成,随POST等修改类请求提交。RedirectToAction会返回302重定向响应,浏览器收到后会自动发起GET请求访问目标地址。GET请求本身不会携带CSRF令牌,且你给标注了[HttpGet]的Cabinet方法加上了[ValidateAntiForgeryToken],触发令牌校验失败,返回400错误。- 额外说明:GET请求本身是幂等请求,不会修改服务器侧资源,本身不需要做CSRF防护,
[ValidateAntiForgeryToken]不应该标注在仅接受GET请求的Action上。
修复方案
直接删除Cabinet方法上的[ValidateAntiForgeryToken]特性即可,该场景下不需要对GET请求做CSRF校验。
如果确实有特殊需求需要对该接口做CSRF防护,需要把接口请求类型改为POST,同时调整跳转逻辑为返回带CSRF令牌的自动提交表单,而非直接重定向,不过该方案仅适合特殊场景,常规业务不推荐使用。
内容的提问来源于stack exchange,提问作者Slepoyi
相关产品推荐
相关产品推荐

