ajax - 使用 AJAX 时的神秘 401 挑战

标签 ajax authentication asp.net-core cookies

我在网上托管了一个 .NET Core Web 应用程序。

我正在通过 cookie 使用基于声明的身份验证:

登录成功时...

var principal = new ClaimsPrincipal();
var id = new ClaimsIdentity(user);
id.AddClaim(new Claim("ViewData", "Allowed"));
id.AddClaim(new Claim("TenantId", user.TenantId));
principal.AddIdentity(id);
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, principal);

这对于除一个用户之外的每个用户都适用 - 但是,当这个特定用户(第 3 方)与特定页面(其他所有页面)交互时,他们在浏览器中遇到了身份验证弹出窗口(他们已经尝试了一些)工作正常。

这让我相信这个问题是环境问题,但我想了解这里可能会发生什么。

有问题的页面与其他所有页面之间的唯一区别是,该页面向 Controller 执行 AJAX 发布以保存一些数据。 Home Controller 需要授权才能查看(或编辑)数据。
[Authorize(Policy = "ViewData")]
Ajax 是您的标准配置

Razor :
$.ajax({
  type: 'POST',
  url: '@Url.Action("_Save", "Home")',
  dataType: 'json',
  contentType: 'application/json',
  data: ko.toJSON(viewModel.model()),
  success: function (result) {
  //... callback code etc

检查呈现的 JS 显示 AJAX 调用是相对于当前页面的,因此不会转到一些奇怪的 URL

原始 JS:
$.ajax({
  type: 'POST',
  url: '/Home/_Save',
  dataType: 'json',
  contentType: 'application/json',
  data: ko.toJSON(viewModel.model()), // ... etc

当我查看浏览器时,我可以看到包含在标题中的 cookie:
accept: application/json, text/javascript, */*; q=0.01
accept-encoding: gzip, deflate, br
accept-language: en-GB,en-US;q=0.9,en;q=0.8
cache-control: no-cache
content-length: 4775
content-type: application/json
cookie: <cookie details here>

不幸的是,它是第 3 方,我无法真正连接到机器以查看浏览器的调试控制台。

我的问题真的很长——听起来可能是代理问题,但我不明白为什么进行 AJAX 调用与进行登录 POST 请求有什么不同,当然除非我的 AJAX 设置缺少一些身份验证数据这是必需的 - 也许是某种标题?

有没有人见过这样的东西?

最佳答案

我见过类似这样的问题,它们通常与安全设置有关。您可以尝试查看 CSRF header 。这可能是几件事。这可能包括本地防病毒、机内防火墙、反 spy 软件或其他隐私/保护应用程序。由于它是单个用户,调试将非常困难,我建议您弄清楚该用户的安全设置/应用程序与同事的安全设置/应用程序有何不同。

在特定浏览器中将您的站点添加到受信任站点列表可能会解决单个问题。这几乎可以肯定是隐藏在那里的东西。

关于ajax - 使用 AJAX 时的神秘 401 挑战,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56076625/

相关文章:

javascript - 如何在 AJAX 请求期间启用 Google Storage gzip

javascript - 关于 web worker 同步请求的看法

javascript - 使用 AJAX 的动态级联下拉列表

ajax - 强制显示浏览器的 HTTP 身份验证对话框

authentication - 在对附加服务进行身份验证后向 token 添加附加声明

php - Cake php 登录显示用户名和密码无效,即使它们是正确的

authentication - 使用 Swift 进行游戏中心身份验证

asp.net-mvc - ASP.NET Core 工作时会读取多少次 appsettings.json 文件?

c# - .Net Core HttpClient 摘要身份验证

asp.net - 在 razor 页面中集成 Tailwind css cdn