У меня есть 2 серверных приложения Blazor, каждое из которых имеет собственную регистрацию приложений в Azure AD. Они практически полностью готовы к созданию нового серверного приложения Blazor в VS2019, .NET Core 3.0.
Когда они открыты на 2 вкладках браузера, и я выхожу из приложения, AI все еще может перемещаться по ссылкам на страницы в приложении B. Приложение B не видит, что я вышел из системы, пока я не нажму на кнопку браузера. кнопка обновления страницы.
Я попытался добавить @attribute [Authorize] на страницы, определив <NotAuthorized>
на странице App.razor и используя функцию AuthenticationStateProvider
на странице OnInitializedAsync
, чтобы проверить,.IsAuthenticated
без удачи.
@page "/fetchdata"
@attribute [Authorize]
[CascadingParameter] Task<AuthenticationState> authenticationStateTask { get; set; }
protected override async Task OnInitializedAsync()
{
var authState = await authenticationStateTask;
var user = authState.User;
if (!user.Identity.IsAuthenticated)
{
NavigationManager.NavigateTo("Error");
}
}
<Router AppAssembly="@typeof(Program).Assembly">
<Found Context="routeData">
<AuthorizeRouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)">
<NotAuthorized>
<h1>Please Log In.</h1>
</NotAuthorized>
</AuthorizeRouteView>
</Found>
<NotFound>
<CascadingAuthenticationState>
<LayoutView Layout="@typeof(MainLayout)">
<p>Sorry, there's nothing at this address.</p>
</LayoutView>
</CascadingAuthenticationState>
</NotFound>
</Router>
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(AzureADDefaults.AuthenticationScheme).AddAzureAD(options => Configuration.Bind("AzureAd", options));
services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build();
options.Filters.Add(new AuthorizeFilter(policy));
});
services.AddRazorPages();
services.AddServerSideBlazor();
services.AddSingleton<WeatherForecastService>();
services.AddServerSideBlazor().AddCircuitOptions(options => { options.DetailedErrors = true; });
services.AddSingleton<TestContextService>();
}