gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:29:10 27 4
gpt4 key购买 nike

我在网上托管了一个 .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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com