Blazor webassembly pwa 会话存储在部署到 Azure 后不持久

Posted

技术标签:

【中文标题】Blazor webassembly pwa 会话存储在部署到 Azure 后不持久【英文标题】:Blazor webassembly pwa session storage not persisting after deployment to Azure 【发布时间】:2021-04-22 14:31:28 【问题描述】:

我正在开发一个 Blazor webassembly pwa,本地运行项目会将用户存储在会话存储中并保留在那里。

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

它在本地工作,密钥对将保持不变。

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

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

【问题讨论】:

您说当您在本地运行您的应用程序时,令牌存储在本地存储中。您的屏幕截图显示了会话存储。 session store 在刷新时被清除。 “不同的页面”是什么意思?不同的@page 但在同一个 blazor 应用程序中?是否有理由不使用本地存储来持久化令牌? @Justthebenno 是的,同一应用程序中的不同“@page”。登录时令牌被放入本地存储中,但在导航到不同的“@page”或刷新浏览器窗口时会被删除。被删除的令牌是我的问题,我不知道为什么会这样。 我没有看到 Key 是这样的值:“oidc.user:localhost:44308:BlazorApp1.Client” @enet 没错,这是我的问题。它确实会存储大约半秒钟,例如 oidc.user 等,然后在重定向或导航到我的应用程序中的另一个页面后它不再存在。因此,我的用户现在已注销。此问题仅在部署后出现,在本地运行。 【参考方案1】:

没错,这是我的问题。它确实会存储大约半秒钟,例如 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(); 在 Configure 方法中,紧接在 app.UseEndpoints(endpoints => 上方

希望这行得通...

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

【讨论】:

可悲的是不起作用,但是我有一个 Blazor webassembly,所以它没有 startup.cs ,但是在 program.cs 中添加它并没有任何区别。当使用 Blazored 添加测试键值时,它确实有效,并且它仍然存在。所以看起来默认的 Blazor 身份验证提供程序正在发生一些事情,它负责在存储中创建一个项目,对吗?这就是为什么我提到它是否可以覆盖身份验证提供程序的那部分。

以上是关于Blazor webassembly pwa 会话存储在部署到 Azure 后不持久的主要内容,如果未能解决你的问题,请参考以下文章

初尝 Blazor WebAssembly

初尝 Blazor WebAssembly

明晚7点半 | Blazor + WebAssembly开启Web开发新体验

Blazor WebAssembly + Grpc Web = 未来?

Blazor WebAssembly 3.2 正式发布

「译」 用 Blazor WebAssembly 实现微前端