我想通过CORS将前端网站连接到后端API,该后端API使用简单的身份验证(名称和密码)来授权用户。为此,我使用Javascripts Fetch API。看来即使我使用credentials = "initial"
,每个提取调用的会话ID也会发生变化:
function onClick() {
const url = 'https://localhost:44394/api/account/Login/Standard/P@$$w0rd';
fetch(url, {
method: 'POST',
credentials: 'include',
mode: 'cors'
}).then(function (response) {
return response.text().then(function (text) {
document.getElementById("at").innerHTML = text;
});
});
}
我在Configure()
的{{1}}中添加了以下内容:
AspNetCore-Startup.cs
并转到我的app.UseCors(builder=>builder.AllowAnyOrigin().AllowCredentials().AllowAnyMethod().AllowAnyHeader());
中的ConfigureServices()
:
AspNetCore-Startup.cs
我无法使用services.AddCors();
功能登录。当我使用onClick()
而不是credentials: "same-origin"
时,我可以登录,但是随后的API调用将更改该调用的会话ID。
如何防止提取呼叫更改会话ID?
编辑:
在我的帐户控制器中,我通过include
访问当前会话ID。也许就像服务器会话,而不是请求者会话?
答案 0 :(得分:0)
会话Cookies与CORS无关。 CORS与对其他域的请求有关。
会话是存储在服务器上的“某些数据”,并由在您的浏览器中存储为cookie的ID标识。
知道这一点,很容易调试问题:
您可以在浏览器开发人员工具>网络面板中看到此内容。
也许这就像服务器会话,而不是请求者会话?
它始终是服务器会话。您的浏览器只是告诉服务器要使用哪个会话(数据)。
您的问题没有提供详细信息,所以我不得不猜测:GDPR可能会阻止asp核心设置会话cookie。
文档:https://docs.microsoft.com/en-us/aspnet/core/security/gdpr?view=aspnetcore-2.2
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => false;
...
});
可以用作“快速而肮脏的”解决方案。