Как потребовать аутентификацию в ASP.NET Core 5 Blazor Server Mode с перенаправлением для входа

Как настроить конечную точку BlazorHub так, чтобы она запрашивала аутентифицированного пользователя с автоматическим перенаправлением для входа в систему, если она не аутентифицирована?

Я попытался настроить политику авторизации по умолчанию, а также вызвать RequireAuthenticated в построителе конечных точек BlazorHub, но меня все еще не перенаправляют на страницу входа, когда я запускаю приложение Blazor.

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddRazorPages();
        services.AddServerSideBlazor();

        services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(); // added by me
        services.AddAuthorization(options =>
        {
            options.DefaultPolicy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .Build();
        }); // added by me
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();

        app.UseRouting();

        app.UseAuthentication(); // added by me
        app.UseAuthorization();  // added by me

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
            endpoints.MapBlazorHub()
                .RequireAuthorization(); // added by me
            endpoints.MapFallbackToPage("/_Host");
        });
    }
}

person Liero    schedule 08.10.2020    source источник


Ответы (2)


Я сделал это вот так

services.AddRazorPages()
        .AddRazorPagesOptions(options
        => options.Conventions
        .AuthorizeFolder("/")
        );
person Mister Magoo    schedule 23.11.2020

_host.cshtml - это обычная страница Razor, а не компонент Blazor. Следовательно, для Razor Pages должна потребоваться аутентификация:

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
    services.AddServerSideBlazor();
    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
        .AddCookie(options =>
        {
            options.LoginPath = "/Auth/Login";
            options.LogoutPath = "/Auth/Logout";
        });
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapRazorPages().RequireAuthorization(); // required
        endpoints.MapBlazorHub().RequireAuthorization(); 
        endpoints.MapFallbackToPage("/_Host");
    });
}

Это похоже на ответ @MisterMagoo

person Liero    schedule 23.11.2020