带重定向的 ASP.NET Core WebAPI 会话

问题描述 投票:0回答:1

我尝试在 WebAPI 的第一个方法中存储会话,并从第二个方法获取它。我正在使用

HttpContext.Session.SetString
,并且在我的状态文件中包含了所需的
app.useSession
services.AddDistributedMemoryCache()
services.AddSession()
方法。

问题是,我的第一个方法的返回类型为“RedirectResult”,并且它正在执行

new Redirect("http:// ...")

然后当我尝试运行第二种方法时,会话为空。我认为是因为第一种方法中发送到浏览器的会话 cookie 标头被重定向覆盖了。

那么我该怎么做呢?我正在尝试存储 code_verifier 字符串(用于 OAuth PKCE 实现),然后重定向到 OAuth 代码请求端点

看来我最初的怀疑是错误的;这与重定向无关。

当 OAuth 服务器重定向回我的第二个 WebAPI 的方法时,它通过 POST 执行此操作。出于某种原因,cookies(包括 与我尝试在浏览器中通过普通 GET 发出请求时不同,

AspNetCore.Session
cookie)没有被发送...

我确实看到

AspNetCore.Session
cookie 的 SameSite 设置为 LAX。 那么我该怎么做呢?

asp.net-core session asp.net-core-webapi
1个回答
0
投票

当请求通过 POST 来自第 3 方时,“LAX”cookie 不允许被继承。

通过将 .NET Core 会话 cookie 的 SameSite 属性设置为“None”解决了该问题。这还要求将安全标志设置为“true”并且 WebAPI 通过 HTTPS 运行。

必须从浏览器中手动删除之前的会话 cookie 才能生效。

services.AddSession(options =>
{
    options.Cookie.SameSite = Microsoft.AspNetCore.Http.SameSiteMode.None;
    options.Cookie.SecurePolicy = Microsoft.AspNetCore.Http.CookieSecurePolicy.Always;                
});

services.AddSession();
© www.soinside.com 2019 - 2024. All rights reserved.