Cha*_*leh 6 authentication cookies ajax asp.net-core
我有一个.NET Core网络应用托管在网上。
我正在通过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);
Run Code Online (Sandbox Code Playgroud)
这对于除一个用户之外的每个用户都可以正常工作-但是,当该特定用户(第三方)与特定页面(每隔一页)进行交互时,正在浏览器(他们尝试了几次)中遇到身份验证弹出式窗口工作正常。
这使我相信问题是环境方面的,但是我想了解这里可能发生的情况。
有问题的页面与其他页面之间的唯一区别是,该页面向控制器执行AJAX发布以保存一些数据。所述Home
控制器需要AUTH到视图(或编辑)的数据。
[Authorize(Policy = "ViewData")]
Ajax是您的标准资料
剃刀:
$.ajax({
type: 'POST',
url: '@Url.Action("_Save", "Home")',
dataType: 'json',
contentType: 'application/json',
data: ko.toJSON(viewModel.model()),
success: function (result) {
//... callback code etc
Run Code Online (Sandbox Code Playgroud)
检查渲染的JS表明AJAX调用是相对于当前页面的,因此不会进入一些奇怪的URL
原始JS:
$.ajax({
type: 'POST',
url: '/Home/_Save',
dataType: 'json',
contentType: 'application/json',
data: ko.toJSON(viewModel.model()), // ... etc
Run Code Online (Sandbox Code Playgroud)
在浏览器中查看时,我可以看到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>
Run Code Online (Sandbox Code Playgroud)
不幸的是,作为第三方,我无法真正连接到计算机以查看浏览器的调试控制台。
我的问题确实是一个长远问题-听起来可能是代理问题,但我不明白为什么进行AJAX调用与发出登录POST请求有什么不同,除非我的AJAX设置当然缺少一些身份验证数据这是必需的-也许是某种标题?
有人看过类似的东西吗?
我见过类似这样的问题,它们通常与安全设置有关。您可以尝试查看 CSRF 标头。这可能有几件事。这可能包括本地防病毒软件、机上防火墙、反间谍软件或其他隐私/保护应用程序。由于它是单个用户,因此调试它将非常困难,我建议您弄清楚该用户的安全设置/应用程序与其同事的安全设置/应用程序有何不同。
将您的站点添加到特定浏览器中的受信任站点列表可能会解决该问题。几乎可以肯定,里面藏着什么东西。
归档时间: |
|
查看次数: |
178 次 |
最近记录: |