ASP.NET5 WebAPI Session 带重定向
ASP.NET5 WebAPI Session with redirect
我试图在我的 WebAPI 的第一个方法中存储一个 session,然后从第二个方法中获取它。
我正在使用 HttpContext.Session.SetString,并且在我的状态文件中包含了所需的“app.useSession”和 services.AddDistributedMemoryCache()、services.AddSession() 方法。
问题是,我的第一个方法有一个 return 类型的“RedirectResult”,并且它正在做一个“new Redirect(”http:// ...”)”
然后当我尝试 运行 第二种方法时,session 为空。我假设是因为在第一种方法中发送到浏览器的 session cookie headers 被重定向覆盖了。
那么有什么办法呢?
我正在尝试存储一个 code_verifier 字符串(用于 OAuth PKCE 实现),然后重定向到一个 OAuth 代码请求端点
更新:看来我最初的猜测是错误的。这与重定向无关。
当 OAuth 服务器重定向回我的第二个 WebAPI 方法时,它通过 POST 执行此操作。出于某种原因,cookie(包括
AspNetCore.Session cookie) 没有被发送,这与我尝试通过浏览器中的普通 GET 发出请求时不同...
我确实看到 AspNetCore.Session cookie 的 SameSite 设置为 LAX。
那我该怎么做呢..?
当请求来自第 3 方 POST 时,“LAX”cookie 不允许它被转移。
通过将 .NET 核心会话 cookie 的 SameSite 属性 设置为“None”,问题已得到解决。这还需要将 Secure 标志设置为“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();
我试图在我的 WebAPI 的第一个方法中存储一个 session,然后从第二个方法中获取它。 我正在使用 HttpContext.Session.SetString,并且在我的状态文件中包含了所需的“app.useSession”和 services.AddDistributedMemoryCache()、services.AddSession() 方法。
问题是,我的第一个方法有一个 return 类型的“RedirectResult”,并且它正在做一个“new Redirect(”http:// ...”)”
然后当我尝试 运行 第二种方法时,session 为空。我假设是因为在第一种方法中发送到浏览器的 session cookie headers 被重定向覆盖了。
那么有什么办法呢? 我正在尝试存储一个 code_verifier 字符串(用于 OAuth PKCE 实现),然后重定向到一个 OAuth 代码请求端点
更新:看来我最初的猜测是错误的。这与重定向无关。 当 OAuth 服务器重定向回我的第二个 WebAPI 方法时,它通过 POST 执行此操作。出于某种原因,cookie(包括 AspNetCore.Session cookie) 没有被发送,这与我尝试通过浏览器中的普通 GET 发出请求时不同...
我确实看到 AspNetCore.Session cookie 的 SameSite 设置为 LAX。 那我该怎么做呢..?
当请求来自第 3 方 POST 时,“LAX”cookie 不允许它被转移。
通过将 .NET 核心会话 cookie 的 SameSite 属性 设置为“None”,问题已得到解决。这还需要将 Secure 标志设置为“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();