我有一个使用 OIDC 身份验证的 Blazor WASM 应用程序。我的 OIDC 正在运行。
builder.Services.AddOidcAuthentication(options =>
{
options.ProviderOptions.ResponseType = "code";
options.ProviderOptions.DefaultScopes.Add("offline_access");
options.ProviderOptions.Authority = "Oauth URL";
options.ProviderOptions.ClientId = "client ID";
});
我定义了offline_access 范围,以便生成刷新令牌。
用户登录后,来自令牌端点的响应将存储在会话存储中。只要用户不退出应用程序,这种方法就非常有效。但是,一旦用户关闭浏览器然后再次打开浏览器,即使刷新令牌尚未过期,他们也必须重新登录网站。
使用 OIDC 的 Blazor WASM 应用程序如何使用刷新令牌?
谢谢你, 特拉维斯
我认为在你的情况下,由于你将数据存储在会话存储中,一旦浏览器关闭,数据就会丢失。
sessionStorage
的范围仅限于浏览器的选项卡。如果用户重新加载选项卡,该状态仍然存在。如果用户关闭选项卡或浏览器,状态就会丢失。如果用户打开多个浏览器选项卡,则每个选项卡都有自己独立的数据版本。
如果使用
localStorage
,在这种情况下,如果用户重新加载页面或关闭并重新打开浏览器,状态将持续存在。
但是,存储不可配置,并且不支持,如此处所述https://github.com/dotnet/aspnetcore/issues/20574
我不认为建议将 oidc 令牌存储在会话或本地存储中,因为这会使您的应用程序面临安全漏洞。
我现在倾向于使用“前端的后端”(BFF) 模式通过 Blazor 进行身份验证。它比简单地将令牌存储在本地/会话存储中要复杂得多。然而,它将令牌管理从客户端推送到服务器,我相信它更安全。
以下是该方法的一个很好的参考。 https://damienbod.com/2021/03/08/secure-blazor-web- assembly-using-cookies/
我并不是说这很容易,因为事实并非如此。但是,我认为这比将令牌存储在客户端中更好,这就像将前门钥匙留在你家的门垫下一样。