防伪令牌适用于用户“”,但当前用户是“用户名”

2023-12-13

我正在构建一个单页应用程序并遇到防伪令牌问题。

我知道为什么会出现这个问题,只是不知道如何解决。

当发生以下情况时我收到错误:

  1. 未登录用户加载对话框(带有生成的防伪令牌)
  2. 用户关闭对话框
  3. 用户登录
  4. 用户打开相同的对话框
  5. 用户在对话框中提交表单

防伪令牌适用于用户“”,但当前用户是 “用户名”

发生这种情况的原因是因为我的应用程序是 100% 单页,当用户通过 ajax post 成功登录时/Account/JsonLogin,我只是用服务器返回的“经过身份验证的视图”切换当前视图,但是不要重新加载页面。

我知道这是原因,因为如果我在步骤 3 和 4 之间简单地重新加载页面,就不会出现错误。

所以看来@Html.AntiForgeryToken()在加载的表单中仍然会为旧用户返回一个令牌,直到重新加载页面。

我该如何改变@Html.AntiForgeryToken()为新的经过身份验证的用户返回令牌?

我注入一个新的GenericalPrincipal与定制IIdentity在每一个Application_AuthenticateRequest所以到时候@Html.AntiForgeryToken()被叫到HttpContext.Current.User.Identity实际上是我的自定义身份IsAuthenticated属性设置为 true 但@Html.AntiForgeryToken除非我重新加载页面,否则似乎仍然会为旧用户呈现令牌。


发生这种情况是因为防伪令牌将用户的用户名嵌入到加密令牌中以实现更好的验证。当您第一次拨打电话时@Html.AntiForgeryToken()用户未登录,因此令牌将有一个空字符串作为用户名,用户登录后,如果不替换防伪令牌,它将不会通过验证,因为初始令牌是针对匿名用户的,现在我们拥有一个具有已知用户名的经过身份验证的用户。

您有几种选择来解决这个问题:

  1. 这次让您的 SPA 执行完整的 POST,当页面重新加载时,它将有一个防伪令牌,其中嵌入了更新的用户名。

  2. 仅查看部分视图@Html.AntiForgeryToken()登录后,立即执行另一个 AJAX 请求,并将现有的防伪令牌替换为请求的响应。

注意设置AntiForgeryConfig.SuppressIdentityHeuristicChecks = true不会禁用用户名验证,它只是更改验证的工作方式。请参阅ASP.NET MVC 文档, the 源代码读取该属性的位置,以及源代码无论该配置的值如何,都会验证令牌中的用户名。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防伪令牌适用于用户“”,但当前用户是“用户名” 的相关文章

  • 从 MVC 控制器返回 JSON 字符串

    我使用以下代码将对象发送 接收到我的 mvc 控制器 ajax url createOrUpdateTimeRecord data JSON stringify data type POST dataType json contentTyp
  • 我的 POST 编辑操作是否会覆盖 EF 中的所有字段?

    假设我有一个包含 7 个字段的数据库记录 我只想编辑字段 1 的内容 所以我点击了 GET EDIT 操作 它使用我的视图模型呈现强类型视图 然后我继续更新字段 1 但是 我的POST 操作包含所有字段的 映射 如下所示 实体框架也是如此
  • MVC4优化如何允许部分视图脚本?

    部分视图和 MVC 的一个问题是 如果您的可重用部分视图需要某些 JavaScript 则无法包含它并将其加载到页面底部的脚本部分 除了性能问题之外 这意味着像 jquery 这样必要的东西还不存在 你必须使用任何依赖 jquery 的代码
  • WebAPI 请求格式的异常

    在项目中使用RC版本的MVC4 WebAPI 我在API服务器端不断遇到以下错误 System FormatException The format of value application json charset utf 8 is in
  • 将数组从 javascript 传递到控制器 MVC 4

    我正在使用剃刀 但很难将数组传递给控制器 该数组包含我制作的对象 我正在尝试执行此操作 ajax type POST url HomePage HandleOperations data JSON stringify operationCo
  • 如何强制 BundleCollection 刷新 MVC4 中缓存的脚本包

    or 我如何学会停止担忧 只针对 Microsoft 完全未记录的 API 编写代码 有没有官方的实际文档System Web Optimization发布 因为我确实找不到任何内容 没有 XML 文档 而且所有博客文章都引用了 RC AP
  • MVC4更新部分视图

    我正在开发一个简单的 MVC 应用程序 我有主视图 部分视图和控制器 这是我的主要视图 model partitalViewTest Models Qset div class transbox style height 1 Html Pa
  • 如何绕过 ASP.NET Web API 中发现多个操作的异常

    当试图找到以下问题的解决方案时 默认操作的 MVC Web Api 路由不起作用 https stackoverflow com questions 11724749 mvc web api route with default actio
  • 在 mvc4 中创建通用 mvc 视图

    我以前也提过类似的问题 没有得到答案 如何创建一个通用的 mvc4 视图 该视图可以显示传递给它的模型列表或单个模型 模型可以是个人 组织或团体 无论传递给它的是什么 如果您正在寻找类似的东西 model MyViewModel
  • ASP.NET MVC 粘贴到剪贴板

    我有一个 ASP NET MVC 4 应用程序 我想复制文本 从 PDF CTRL C 并将其作为参数粘贴到控制器的方法中 我的网络网格有一个带有 ActionLink 的列 grid Column format a href Url Ac
  • 使用 AJAX 加载的 Javascript 和 MVC4 部分视图

    我有一个 ASP NET MVC 4 视图 可以动态地将两个嵌套部分加载到 div 通过 JQuery AJAX 调用的元素 每个部分都有一大堆自己的 Javascript 为了让它全部正常工作 我目前将所有 Javascript 都放在s
  • MVC 4 - 如何关闭默认的 Error.vbhtml 页面?

    有人知道如何关闭默认错误页面或它的引用位置吗 好吧 我想通了 事实证明 在我的自定义 ElmahHandleErrorAttribute 类中 OnException 方法确实被重写了 应该如此 但第一行代码是 MyBase OnExcep
  • 模拟 DBSet,EF 模型优先

    正如标题所说 我遵循模型优先方法 所以我的模型类是自动生成的 如果我想嘲笑DBContext衍生的MyModelContainer其中包含DBSets实体类 阅读一些内容 为了进行单元测试 您需要将其更改为IDBSet 是否可以做到这一点
  • 在 MVC4 中使函数异步时 HttpContext.Current null

    我目前正在 VS2010 SP1 中开发 MVC4 我做了其中一个功能 控制器类异步 作为其中的一部分 我制作了控制器类 派生自 AsyncController 并添加了以下两个方法 参见代码部分 1 和 2 下 一种以 Async 结尾的
  • 如何访问Web api控制器中的mvc控制器以从视图中获取pdf

    我为单页 Web 应用程序创建了 Web Api 和 MVC 组合 我想调用 Web api 并渲染 mvc 控制器以使用 Rotativa api 从视图创建 pdf 问题是当我在 Web api 中访问 mvc 控制器时它不起作用 我如
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器
  • ModelBinder 验证在使用反射的 getter 上中断

    我遇到了一个似乎与反射和模型绑定验证有关的问题 并且FormatterParameterBinding ExecuteBindingAsync 特别是 虽然我可以使用方法来做我想做的事情 但如果我可以使用属性 我会更喜欢它 在这里 我正在寻
  • ServerManager 构造函数在测试环境中崩溃

    我正在 MVC 4 中构建一个控制应用程序 遇到了一个非常烦人的问题 当我在本地调试项目时 它工作正常 但是 当我将项目部署到测试服务器 Windows Server 2008 R2 时 出现以下换行符 ServerManager mana
  • 在 ASP.NET MVC 中设置默认 JSON 序列化器

    我正在开发一个已部分转换为 MVC 的现有应用程序 每当控制器响应 JSON ActionResult 时 枚举都会以数字形式发送 而不是字符串名称 听起来默认的序列化程序应该是 JSON Net 它应该将枚举作为其名称而不是整数表示形式发
  • 更改 web.config 的 appSettings 中的值时重新启动 IIS 中的网站

    为了安全起见 当我更改 Web config 中 appSettings 的值时 我总是重新启动网站 以便刷新所有更改 但我真的需要重新启动它吗 IIS 如何处理 appSetting 值 是一次性读取这些值 启动应用程序后 还是每次客户端

随机推荐

  • 断开各个对等点与 MCSession 的连接?

    如果我有一组已连接的对等点 假设有 3 个 a gt b a gt c a gt d 我只想断开对等点 c 的连接 我应该做什么 我看到对类似问题的一个答复指出 您只能断开 您自己 与会话的连接 这意味着在上述情况下 如果我这样做 mySe
  • 在 MATLAB GUIDE 中显示大型文本文件的最佳方式是什么?

    如何使用 MATLAB GUIDE 控件在 GUI 中显示文本文件的内容 文本文件可能很长或很宽 因此它应该能够具有垂直和水平滚动条 多行编辑框可能是显示文本的最佳选择 例子 read text file lines as cell arr
  • 函数可选参数DATE类型失败

    我有一个函数可以查找下周一的日期 当没有传递可选日期参数时 它将变为默认值零 我想我已经添加了注释来解释问题 Function NextMondayFromADateOrToday Optional StartDate As Date As
  • 如何沿矩阵轴执行滚动求和?

    给定矩阵X with T行和列k T 50 H 10 k 5 X np arange T reshape T 1 np ones T k 如何执行滚动累积和X沿着行轴有滞后H Xcum np zeros T H k for t in ran
  • 如果我不“删除”会发生什么? [复制]

    这个问题在这里已经有答案了 如果我在执行期间分配一些内存但从不调用会发生什么delete程序终止 操作系统会释放我分配的所有内存并且不会 浪费 任何内存吗 或者在计算机重新启动之前我会丢失一部分内存吗 显然 我知道良好的编码实践是确保删除不
  • XSLT:多次复制对象 xml,同时递增属性和值

    我有一个如下所示的 xml 我想复制 n 次 同时递增其元素之一和属性之一 XML 输入
  • XNA 处理按键组合

    我已经阅读了一些涉及此问题的文章 但是在尝试实施一些之后 总是遇到同样的问题 快速说明 这是家庭作业 我正在使用 XNA 为我的游戏设计课程重新创建 Super Smash Brothers N64 风格 现在我有两个问题密切相关 熟悉 S
  • Maven 依赖项在 WEB-INF/lib 中不可见

    我在使我的项目基于 Maven 时遇到了这个奇怪的问题 我创建了一个新的Maven在 Eclipse 中创建项目并启用动态 Web 方面 但在运行时现在它会抛出ClassNotFoundException因为 Maven 依赖项没有复制到W
  • 子查询上的 GROUP_CONCAT 的奇怪结果

    在子查询上使用 GROUP CONCAT 时 我有一个奇怪的行为 这是我的查询 SELECT name GROUP CONCAT DISTINCT id SEPARATOR AS id FROM SELECT APN AS name GRO
  • 如何转换为模板类型?

    在 gdb 中 如果你有一个指向某个东西的指针 你可以在打印它之前对其进行转换 例如 这有效 print int 0xDEADBEEF 但是 如何打印std vector
  • 为什么 Map 不能在 chrome/node 中进行子类化?

    所以 ES 6 给我们带来了Maps 而且不会太快 为了实现我自己的邪恶目的 我希望对 Map 进行子类化 我尝试了以下操作 为了清楚起见 进行了缩写 function Foo return Map apply this slice cal
  • 添加突出显示不适用于 Elasticsearch 2.3.3 中的 has_child 查询

    当我使用 hasChildQuery 时 一切正常 但是当我添加addHighlightedField 方法 它不起作用 以下是我的代码 TermsLookupQueryBuilder terms QueryBuilders termsLo
  • 从 Angular 中的自定义表单组件访问 FormControl

    我的 Angular 应用程序中有一个自定义表单控制组件 它实现了ControlValueAccessor界面 但是 我想访问FormControl实例 与我的组件关联 我正在使用反应式形式FormBuilder并使用提供表单控制formC
  • Gnuplot 工作流程涉及多重绘图的拟合循环

    我想在 gnuplot 中执行以下操作 读取我的文件 这些文件被方便地标记为 filenameN txt 其中 N 是第 N 个文件 使用 aN bN 将一些多项式 fN x 拟合到数据中 并使用 multiplot 将所有这些绘制在单个图
  • 有反向映射功能吗?

    在 clojure 中 您可以将函数映射到值序列 是否有一个内置函数可以将单个值作为参数映射到一系列函数 map inc 1 2 3 4 gt 2 3 4 5 reverse map inc dec str 1 gt 2 0 1 rever
  • 什么是spark.python.worker.memory?

    谁能给我更准确地描述这个 Spark 参数以及它如何影响程序执行 我无法从文档中确切地看出这个参数 在幕后 的作用 该参数影响 Python 工作线程的内存限制 如果Python工作进程的RSS大于内存限制 那么它会将数据从内存溢出到磁盘
  • setNeedsLayout 与 setNeedsUpdateConstraints 和 layoutIfNeeded 与 updateConstraintsIfNeeded

    我知道自动布局链基本上由 3 个不同的过程组成 更新约束 布局视图 这是我们计算帧的地方 display 我不完全清楚的是两者之间的内在区别 setNeedsLayout and setNeedsUpdateConstraints 来自苹果
  • 使用 python 和请求进行 Instagram 身份验证

    我需要为我的项目创建 Instagram 登录表单 我已经编写了这段代码 但它不能正常工作 我需要在请求后获取 sessionid cookie def authorize inst url https www instagram com
  • 如何合并两个数据库,具有相同的数据,但具有不同的主键,且没有重复的字段?

    我有两个 mdb 文件 如果需要的话 我还可以将其转换为 MySQL 数据库 如何将这两个不同的数据库合并为一个 这个想法是从两个数据库获取所有信息并将其合并为一个 而不复制任何客户端 问题是两个bds都有相同的客户端和不同的客户端 但是客
  • 防伪令牌适用于用户“”,但当前用户是“用户名”

    我正在构建一个单页应用程序并遇到防伪令牌问题 我知道为什么会出现这个问题 只是不知道如何解决 当发生以下情况时我收到错误 未登录用户加载对话框 带有生成的防伪令牌 用户关闭对话框 用户登录 用户打开相同的对话框 用户在对话框中提交表单 防伪