在 Web Api 中跨子域读取 cookie
Read cookies cross sub-domain in WebApi
我有一个 .NET Core 3.1 WebAPI 应用程序,其中 UI 和 API 托管在同一根域的不同子域上,比如 https://api.domain.com
和 https://ui.domain.com
UI 站点设置了一些我需要在 API 后端读取的 cookies (.domain.com),但无论我尝试什么 - cookies 都不会传入。我在我的 Startup.cs
ConfigureServices:
中启用允许通配子域和凭据的 CORS 策略
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder =>
{
builder.WithOrigins("https://*.domain.com")
.SetIsOriginAllowedToAllowWildcardSubdomains
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
});
});
并在应用配置中使用它:
app.UseCors("CorsPolicy");
我还设置了 Cookie 策略:
app.UseCookiePolicy(
new CookiePolicyOptions()
{
MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.Lax
});
但是当从 https://ui.domain.com
调用 https://api.domain.com
时,预期的 cookie 不存在。
如果 UI 和 API 都在同一个子域上 - 它可以工作。我错过了什么?
我最终在每个 $http
请求中添加了 { withCredentials: true }
。有点痛苦,但这是唯一对我有用的东西。
我有一个 .NET Core 3.1 WebAPI 应用程序,其中 UI 和 API 托管在同一根域的不同子域上,比如 https://api.domain.com
和 https://ui.domain.com
UI 站点设置了一些我需要在 API 后端读取的 cookies (.domain.com),但无论我尝试什么 - cookies 都不会传入。我在我的 Startup.cs
ConfigureServices:
services.AddCors(options =>
{
options.AddPolicy("CorsPolicy",
builder =>
{
builder.WithOrigins("https://*.domain.com")
.SetIsOriginAllowedToAllowWildcardSubdomains
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials();
});
});
并在应用配置中使用它:
app.UseCors("CorsPolicy");
我还设置了 Cookie 策略:
app.UseCookiePolicy(
new CookiePolicyOptions()
{
MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.Lax
});
但是当从 https://ui.domain.com
调用 https://api.domain.com
时,预期的 cookie 不存在。
如果 UI 和 API 都在同一个子域上 - 它可以工作。我错过了什么?
我最终在每个 $http
请求中添加了 { withCredentials: true }
。有点痛苦,但这是唯一对我有用的东西。