如何自定义Blazor WebAssembly Msal身份验证以将令牌存储在localStorage中而不是sessionStorage中?

时间:2020-07-02 16:02:56

标签: blazor blazor-webassembly

上下文

我正在研究Secure an ASP.NET Core Blazor WebAssembly standalone app with Azure Active Directory B2C指南,以在我的Blazor WebAssembly应用程序中启用客户端身份验证(没有服务器端组件,整个应用程序都在浏览器中运行)。该设置可以按预期工作,我可以将用户重定向到AD B2C用户流,登录,然后在正确验证用户身份的情况下重定向回我的应用程序。

问题

默认身份验证行为在sessionStorage内保留了从AD B2C检索到的JWT令牌,该令牌将在关闭浏览器窗口后立即清除。我想自定义此默认功能,以将令牌持久保存到localStorage以便进行更长的身份验证会话-我希望在用户关闭浏览器窗口后保持登录状态,以便后续访问。这些文档似乎没有提供有关如何实现此目标的任何信息。

我还查看了Additional Scenarios文档,以了解如何定制RemoteAuthenticatorView,但是找不到与这些令牌的存储和检索方式有关的任何信息。

我对此表示感谢!

1 个答案:

答案 0 :(得分:4)

我通过浏览MSAL.js文档来解决了这个问题:有一个cacheLocation配置属性可以设置为 localStorage ,而Microsoft.Authentication.WebAssembly.Msal.Models.MsalProviderOptions则公开了属性。

要使其正常运行,我只需将以下内容添加到 Program.cs

builder.Services.AddMsalAuthentication(options =>
{
    options.ProviderOptions.Cache.CacheLocation = "localStorage";
    ...
});