- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个使用 asp.net core2
和 Angular
运行的网络 API
应用程序。详细的开发环境配置为here .我正在尝试配置 AntiForgeryToken
验证,但它一直失败。我按照配置。 here ,但我不得不修改它,因为我的角度应用程序和 asp.net 服务器在两个不同的端口上运行,因为前端启动不会生成 token 。我通过在应用程序组件 ngOnInit
调用 API
路径 (/api/Account/ContactInitialization
) 来启动后端,这使我能够生成 token 。配置如下图,
IServiceCollection
服务:
services.AddAntiforgery(options =>
{
options.HeaderName = "X-CSRF-TOKEN";
options.SuppressXFrameOptionsHeader = false;
});
在IApplicationBuilder Configure
:
app.Use(next => context =>
{
string path = context.Request.Path.Value;
if (
string.Equals(path, "/", StringComparison.OrdinalIgnoreCase) ||
string.Equals(path, "/api/Account/ContactInitialization", StringComparison.OrdinalIgnoreCase) ||
string.Equals(path, "/index.html", StringComparison.OrdinalIgnoreCase))
{
// We can send the request token as a JavaScript-readable cookie,
// and Angular will use it by default.
var tokens = antiforgery.GetAndStoreTokens(context);
context.Response.Cookies.Append("XSRF-TOKEN", tokens.RequestToken,
new CookieOptions() { HttpOnly = false });
}
return next(context);
});
http://asp.net.生成两组 key ,
我用 [ValidateAntiForgeryToken]
修饰了我的方法,并在我的 header 请求中包含了 XSRF-TOKEN
cookie 内容。但是我在调用 API
后一直收到 400 (Bad Request)
响应!我在这里错过了什么?
Controller 方法,
[Authorize]
[ValidateAntiForgeryToken]
[HttpPost]
public IEnumerable<string> AutherizeCookie()
{
return new string[] { "Hello", "Auth Cookie" };
}
我的详细 header 请求如下所示,
最佳答案
我假设您可能关注了 documentation ,但掩盖了相关的部分。到目前为止,您所做的仅适用于 Angular,因为 Angular 的 $http
实际上会根据 XSRF-TOKEN< 添加
cookies 。 (但是请注意,即便如此,您已将 header 设置为 X-XSRF-TOKEN
header X-CSRF-TOKEN
,它在这里实际上不起作用。它需要是 X-XSRF-TOKEN
)。
但是,如果您不使用 Angular,则您有责任在 AJAX 请求中自行设置 header ,而您可能会忽略这一点。在这种情况下,您实际上不需要更改任何防伪 token 配置( header 名称、设置 cookie 等)。您只需提供 header 作为 RequestVerificationToken
。例如,使用 jQuery:
$.ajax({
...
headers:
{
"RequestVerificationToken": '@GetAntiXsrfRequestToken()'
},
...
});
这将适用于 View 中的 JavaScript。如果您需要在外部 JS 中执行此操作,则需要设置 cookie,以便您可以从 cookie 中获取值。除此之外,同样的方法适用。
如果您只是想更改 header 名称,您可以这样做;您只需将此处的 RequestVerificationHeader
部分更改为相同的值即可。
关于c# - 为什么 AntiForgeryToken 验证总是失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48038980/
在同一页面的另一个 View 中成功登录后,我需要在 View 中的表单中重新加载 AntiForgeryToken。 我可以通过 jQuery 使用结果登录页面中的新 key 在表单输入 @Html
我正在尝试防止 CSRF 并有两个场景: 从另一个站点内执行 POST 并且在我启用 AntiForgeryToken 时失败 我已经尝试从我的“恶意”Javascript(在另一个站点上运行)首先执
我正在 MVC 应用程序中实现 CSRF。我创建了自定义属性来验证 token ,因为我的输入是 json 编码并由 Ajax 调用。它在同一项目中工作正常,但当任何按钮或链接在同一解决方案中跨不同项
我正在将安全性应用于我的 .net 3.5 mvc2 Web 应用程序。我的网站不包含任何用户身份验证,并且由 .js 文件中的许多 ajax 调用组成 在我的 .aspx 文件中我写道 在我的
我知道 CSRF 的基础知识和 AntiForgeryToken . 我也知道有很多类似的questions周围但似乎没有描述实现细节,这是我感兴趣的部分。 每次调用 Html.AntiForgery
这个问题在这里已经有了答案: how AntiForgeryToken() works in MVC and how to retrieve value at server action metho
我在 ASP.NET Core 2.2 中使用 IdentityServer4。在登录后方法上,我应用了 ValidateAntiForgeryToken。通常在登录页面上停留 20 分钟到 2 小时
我有一个带有 AntiForgeryToken 表单的布局页面 using (Html.BeginForm(action, "Account", new { ReturnUrl = returnUrl
我目前正在ASP.net中开发MVC应用程序。我正在使用AJAX.ActionLink在记录列表中提供删除链接,但是这是非常不安全的。我把这个: 在函数上执行删除操作,这将阻止仅通过URL调用该函数
我正在开发一个使用 asp.net core2 和 Angular 运行的网络 API 应用程序。详细的开发环境配置为here .我正在尝试配置 AntiForgeryToken 验证,但它一直失败。
我的流程非常简单;用户使用登录表单登录。登录表单执行一个帖子,并定义一个 @Html.AntiForgeryToken。在服务器上,操作方法定义[ValidateAntiForgeryToken]来验
我有一个场景,我不需要发送表单数据,但需要通过 ajax 调用发送一些其他数据。我有一个包含 html.AntiForgeryToken() 的表单。 这是我尝试过的。 var modid = $("
在我部署一些在测试中似乎有效的代码之前,使用 AntiForgeryToken 是否存在任何问题?部署到 Azure WebRole 时。因为它生成一些 html 和 cookie,所以我担心以下..
我发布这个是因为这让我们忙了一天,而且我们在 Internet 上找不到任何关于这个解决方案的信息,所以这是为了节省人们以后的时间。这是问题: 如果您的 View 中有一个 @Html.AntiFor
我正在使用 AntiForgeryToken 辅助方法。据我了解,AntiForgeryToken 是基于 session 的,因此每个用户都具有相同的 token ,但另一个用户将具有不同的 tok
有人可以告诉我更多关于它的细节吗? 最佳答案 基本上,防伪 token 会阻止任何人向您的站点提交由并非由实际用户生成的恶意脚本生成的请求。有一个 HTTP only cookie(不能被浏览器中运行
我在让 Microsoft 的 MVC 的 [ValidateAntiForgeryToken] 与使用 Marionette & Backbone 编写的单页应用程序 (SPA) 配合使用时遇到问题
AntiForgeryToken 是否应该应用于 ASP.NET MVC 应用程序中的每个后操作?我完全想不出您不想在每个后期操作中包含此内容的任何原因,但似乎没有人真正建议在您的所有操作中使用它。
我有一个用户可以在不登录的情况下发布的表单。但是,如果他的电子邮件被识别,则需要密码。密码表单通过 Ajax 进行验证,如果成功,则提交主表单。两种形式都需要有效的 AntiForgeryToken。
我感兴趣为什么不是 AntiForgeryToken默认情况下包含在每个 ASP.NET MVC 表单中?似乎总是包含它的好处大于可能的缺点。如果需要,可以禁用此行为,例如 Web 表单 HttpRe
我是一名优秀的程序员,十分优秀!