Несколько серверных приложений Blazor и проблема с выходом из системы проверки подлинности Azure

У меня есть 2 серверных приложения Blazor, каждое из которых имеет собственную регистрацию в Azure AD. Они в значительной степени нестандартные, создавая новое серверное приложение Blazor в VS2019, .NET Core 3.0.

Когда они открыты на 2 вкладках браузера и я выхожу из приложения A, я все еще могу перемещаться по ссылкам страницы в приложении 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>();
        }

person Shane    schedule 24.10.2019    source источник
comment
1) Это происходит с веб-браузерами, отличными от Google Chrome (в последнем из них есть проблемы с выходом из системы из-за той же проблемы с cookie сайта) 2) Это происходит в производственной среде или только на локальном хосте?   -  person Michael Washington    schedule 25.10.2019
comment
Приносим извинения за поздний ответ - он развернут на веб-сервере в нашей интрасети. Я проверю с другим браузером, кроме Chrome. Спасибо за предложения!   -  person Shane    schedule 25.10.2019
comment
На самом деле он работает должным образом в Edge и IE. Мне нужно будет изучить, есть ли исправление для Chrome. Большое спасибо за помощь.   -  person Shane    schedule 25.10.2019


Ответы (1)


Вероятно, это связано с тем, что веб-браузеры, такие как Chrome и Firefox, вносят критические изменения в свои реализации SameSite для файлов cookie.

Вы можете попробовать шаги по снижению риска, описанные здесь: https://github.com/aspnet/AspNetCore/issues/14996

person Michael Washington    schedule 26.10.2019
comment
Спасибо - думаю, это правильно. Буду смотреть на исправления, пока не выйдет патч для 3.0. - person Shane; 28.10.2019