Blazor использует Azure AD аутентификацию, разрешающую анонимный доступ - PullRequest
0 голосов
/ 20 марта 2020

В настоящее время я пишу приложение (на стороне сервера) Blazor, которое включает в себя аутентификацию AzureAD по умолчанию.

Это хорошо работает для аутентифицированных пользователей - вызов входного (_Host.cshtml) файла, перенаправление и затем возврат после аутентификации.

Мне нужно иметь пару страниц , а не , требующих аутентификации - я не хочу, чтобы пользователь вызывался и перенаправлялся в Microsoft.

Что такое правильный способ сделать это? Я экспериментировал с параметрами AllowAnonymousAttribute, AllowAnonymousToPage страниц бритвы, кажется, ничто не может остановить вызов.

Любая помощь будет принята с благодарностью!

Ниже приведены мои настройки для проверки подлинности ( ConfigureServices):

    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.AddTelerikBlazor();
    }

А затем соответствующая часть в Configure:

        app.UseAuthentication();
        app.UseAuthorization();

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

1 Ответ

2 голосов
/ 05 апреля 2020

Я обнаружил, что мне нужно было добавить следующее в _Hosts.cs html

@using Microsoft.AspNetCore.Authorization
@attribute [AllowAnonymous]

После того, как я сделал это разрешение, больше не требовалось ни на одной из страниц по умолчанию, и тогда я смог добавьте его на страницы, где я хотел бы его получить.

Например, если вы хотите защитить страницу Counter.razor, просто добавьте атрибут Authorize вверху:

@attribute [Authorize]

Так что теперь если вы попытались получить доступ к странице счетчика, вы получите сообщение «Не авторизовано».

Если вы хотите удалить ссылку счетчика, когда пользователь не вошел в систему, измените NavMenu.razor и окружите ссылку Счетчик знаком <AuthorizeView> </AuthorizeView> как так:

<AuthorizeView>
    <li class="nav-item px-3">
        <NavLink class="nav-link" href="counter">
            <span class="oi oi-plus" aria-hidden="true"></span> Counter
        </NavLink>
    </li>
</AuthorizeView> 

В идеале я хотел бы просто отказаться от авторизации для страницы индекса и по умолчанию обеспечить все остальное, но я не смог найти способ заставить это работать. Если я попытался добавить @attribute [AllowAnonymous] на страницу Index.razor, он, похоже, проигнорировал ее.

...