在 Blazor 应用程序中进行身份验证时,如果用户在页面之间导航,可能会遇到身份验证丢失的问题。 这是因为 Blazor 默认情况下使用浏览器本地存储来存储身份验证令牌,而每个页面都有自己的本地存储。
要解决这个问题,可以使用 Blazor 服务器应用程序而不是客户端应用程序。在 Blazor 服务器应用程序中,身份验证状态和上下文会自动在客户端和服务器之间同步,因此可以避免在页面之间丢失身份验证的问题。
另一种解决方案是使用 Blazor WebAssembly 中的 IdentityServer4 进行身份验证。IdentityServer4 可以提供单一的令牌服务,以便在浏览器之间共享身份验证状态和上下文。
下面是一个使用 IdentityServer4 的 Blazor WebAssembly 示例代码:
services.AddIdentityServer()
.AddApiAuthorization
"IdentityServer": { "Clients": { "MyBlazorApp": { "Profile": "IdentityServerSPA" } } }
@using Microsoft.AspNetCore.Authorization
Welcome, @context.User.Identity.Name! You are not signed in.
builder.Services.AddOidcAuthentication(options => { options.ProviderOptions.Authority = "https://localhost:5001"; options.ProviderOptions.ClientId = "MyBlazorApp"; options.ProviderOptions.ResponseType = "code"; });
请注意,这只是一个示例,您可能需要根据您自己的情况进行调整。