如何自定义Blazor WebAssembly Msal auth以将令牌存储在本地存储中而不是会话存储中? 上下文

如何自定义Blazor WebAssembly Msal auth以将令牌存储在本地存储中而不是会话存储中? 上下文,blazor,blazor-webassembly,Blazor,Blazor Webassembly,我正在根据指南在Blazor WebAssembly应用程序中启用客户端身份验证(没有服务器端组件,整个应用程序在浏览器中运行)。安装工作如预期,我能够重定向用户到广告B2C用户流,登录,重定向回我的应用程序与用户正确验证 问题 默认身份验证行为会将从AD B2C检索到的JWT令牌保存在会话存储中,浏览器窗口一关闭就会清除。我希望自定义此默认功能,以将令牌持久化到localStorage,以用于更长的身份验证会话—我希望用户在关闭浏览器窗口后登录到后续访问。这些文档似乎没有提供任何关于我如何实现

我正在根据指南在Blazor WebAssembly应用程序中启用客户端身份验证(没有服务器端组件,整个应用程序在浏览器中运行)。安装工作如预期,我能够重定向用户到广告B2C用户流,登录,重定向回我的应用程序与用户正确验证

问题 默认身份验证行为会将从AD B2C检索到的JWT令牌保存在
会话存储
中,浏览器窗口一关闭就会清除。我希望自定义此默认功能,以将令牌持久化到
localStorage
,以用于更长的身份验证会话—我希望用户在关闭浏览器窗口后登录到后续访问。这些文档似乎没有提供任何关于我如何实现这一目标的信息

我还查看了有关如何定制
RemoteAuthenticatorView
的文档,但找不到与如何存储和检索这些令牌相关的任何信息


我非常感谢您的指导

我通过浏览文档找到了答案:有一个
cacheLocation
config属性可以设置为localStorage,而
Microsoft.Authentication.WebAssembly.Msal.Models.MsalProviderOptions
会公开该属性

为了让它工作,我只需将以下内容添加到Program.cs

builder.Services.AddMsalAuthentication(选项=>
{
options.ProviderOptions.Cache.CacheLocation=“localStorage”;
...
});

对我来说,这会持续几个小时直到我的令牌过期,但Msal库似乎不会自动获取新令牌。你有同样的经历吗?即使在我手动尝试使用
注销后,也要等待SignOutManager.SetSignOutState()我用
[Authorize]
属性修饰的任何页面仍然会被路由到我的未授权视图。获取新令牌的唯一方法是完全清除浏览器中的localStorage。