Приложение Blazor Web Assembly с Azure B2C всегда пытается пройти аутентификацию, как только страница загружается.

Я добавляю поддержку Azure AD B2C в приложение Blazor WebAssembly. Я выполнил инструкции здесь https://docs.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/hosted-with-azure-active-directory-b2c?view=aspnetcore-3.1#client-app-configuration

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


person Eduardo Fonseca    schedule 26.07.2020    source источник
comment
Да, не используйте атрибут авторизации на страницах, к которым требуется анонимный доступ.   -  person agua from mars    schedule 26.07.2020
comment
Это странно, даже без них он пытается аутентифицировать   -  person Eduardo Fonseca    schedule 26.07.2020
comment
проверьте файлы app.razor и main.razor, а затем, если вы добавите атрибут авторизации в main.razor, все страницы нуждаются в аутентификации   -  person agua from mars    schedule 26.07.2020


Ответы (1)


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

Чтобы обойти это, в файле Program.cs (в проекте Client) я создал httpClient, который разрешает анонимные запросы

// This allows anonymous requests
// See: https://docs.microsoft.com/en-us/aspnet/core/security/blazor/webassembly/additional-scenarios?view=aspnetcore-3.1#unauthenticated-or-unauthorized-web-api-requests-in-an-app-with-a-secure-default-client
            builder.Services.AddHttpClient("ServerAPI.NoAuthenticationClient", client => client.BaseAddress = new Uri(builder.HostEnvironment.BaseAddress));

Этот пример должен помочь: https://github.com/ADefWebserver/SyncfusionHelpDeskClient/blob/main/Client/Pages/Index.razor

Он вызывает NoAuthenticationClient httpClient

protected override void OnInitialized()
{
    // Create a httpClient to use for non-authenticated calls
    NoAuthenticationClient =
         ClientFactory.CreateClient(
             "ServerAPI.NoAuthenticationClient");
}

public async Task HandleValidSubmit(EditContext context)
{
    try
    {
        // Save the new Help Desk Ticket

        // Create a new GUID for this Help Desk Ticket
        objHelpDeskTicket.TicketGuid =
            System.Guid.NewGuid().ToString();

        await NoAuthenticationClient.PostAsJsonAsync(
            "SyncfusionHelpDesk", objHelpDeskTicket);

        // Send Email
        HelpDeskEmail objHelpDeskEmail = new HelpDeskEmail();
        objHelpDeskEmail.EmailType = "Help Desk Ticket Created";
        objHelpDeskEmail.EmailAddress = "";
        objHelpDeskEmail.TicketGuid = objHelpDeskTicket.TicketGuid;

        await NoAuthenticationClient.PostAsJsonAsync(
            "Email", objHelpDeskEmail);

        // Clear the form
        objHelpDeskTicket = new HelpDeskTicket();

        // Show the Toast
        ToastContent = "Saved!";
        StateHasChanged();
        await this.ToastObj.Show();

    }
    catch (Exception ex)
    {
        ToastContent = ex.Message;
        StateHasChanged();
        await this.ToastObj.Show();
    }
}
person Michael Washington    schedule 26.07.2020