Blazor WebAssembly PWA 会话存储在部署到 Azure 后不会保留

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

我正在开发 Blazor WebAssembly PWA,本地运行该项目会将用户存储在会话存储中并将其保留在那里。

但是当我部署到 Azure(Linux 应用程序服务)时,会话/本地存储不会持续存在。因此,当导航到不同页面(在我的应用程序内)或刷新页面时,oidc.user 变量将从会话存储中删除,因此我的用户被注销。

  • 在本地它正在工作并且密钥对将持续存在。

  • 部署到 Azure 时,成功登录后将添加相同的密钥,但在重定向后将其删除。

所以真正的问题是:为什么我的会话存储在本地工作,但它会在重定向后删除 oidc.user 密钥对,导致用户被注销。

asp.net azure local-storage blazor blazor-client-side
2个回答
0
投票

没错,这就是我的问题。它确实会存储大约半秒,例如 oidc.user 等,然后在重定向或导航到我的应用程序中的另一个页面后,它不再存在。因此,我的用户现在已注销。这个问题只有在部署后才出现,本地运行才有效。

会话 cookie 似乎在发出请求后立即被删除。注意:Cookie 会话 ID 在每次请求时都会发送到服务器。

这可能只是猜测,但你最好尝试一下......

将以下代码添加到您的 CongiureServices 中:

   services.AddDistributedMemoryCache();

    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromSeconds(600);
        options.Cookie.HttpOnly = true;
        options.Cookie.IsEssential = true;
    });

以及配置方法中的

app.UseSession();
,就在
app.UseEndpoints(endpoints =>

上方

希望这有效...

注意:AuthenticationStateProvider 与您面临的问题无关。


0
投票

希望它有帮助,因为我也经历过同样的事情:

  1. 我的 blazor 应用程序和 IDP 位于同一域;
  2. 禁用第三方cookie;
  3. IDP是identityserve4/duende;

由于某种原因,登录后,AuthenticationService 库尝试使用 iframe 进行“check_session”,但由于 #1 和 #2 而失败。由于失败,它会从会话存储中删除“oidc.user:{client_id}”记录以及对后端的后续请求。

解决方案

作者这里很好地讲述了问题和可能的解决方案。

解决方法

您可以修补 AuthenticationService.js 文件,创建自己的文件并删除会话检查,或更改其频率。至少,它会给您的应用程序返回访问令牌生命周期。

这 2 个键是可以修改的好候选键。

{
   key: "monitorSession",
      get: function () {
         return _monitorSession; //maybe return false? 
      },
}
{
   key: "checkSessionInterval",
      get: function () {
         return this._checkSessionInterval;
      },
   },
}
© www.soinside.com 2019 - 2024. All rights reserved.