Несколько приложений Blazor Server и проблема выхода из системы аутентификации Azure - PullRequest
1 голос
/ 24 октября 2019

У меня есть 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>();
        }

1 Ответ

0 голосов
/ 26 октября 2019

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

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

...