带有 Azure B2C 的 Blazor Web Assembly 应用程序总是在页面加载后立即尝试进行身份验证

Posted

技术标签:

【中文标题】带有 Azure B2C 的 Blazor Web Assembly 应用程序总是在页面加载后立即尝试进行身份验证【英文标题】:Blazor Web Assembly App with Azure B2C is always trying to authenticate as soon as page is loaded 【发布时间】:2020-07-26 13:41:18 【问题描述】:

我正在向 Blazor WebAssembly 应用程序添加对 Azure AD B2C 的支持,我按照此处的说明进行操作 https://docs.microsoft.com/en-us/aspnet/core/blazor/security/webassembly/hosted-with-azure-active-directory-b2c?view=aspnetcore-3.1#client-app-configuration

但是,应用程序总是在我加载页面时尝试进行身份验证, 这不允许网站的公共匿名部分。 这个问题有解决办法吗?

【问题讨论】:

是的,不要在您希望匿名访问的页面上使用 Authorize 属性。 这很奇怪,即使没有它们,它也会一直尝试进行身份验证 检查您的 app.razor 和 main.razor 文件,然后如果您在 main.razor 中添加授权属性,则所有页面都需要身份验证 【参考方案1】:

默认的 httpClient 需要授权,所以即使打电话查看某人是否被授权也会导致代码提示用户登录。

为了解决这个问题,我在 Program.cs 文件(在客户端项目中)创建了一个 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();
    

【讨论】:

以上是关于带有 Azure B2C 的 Blazor Web Assembly 应用程序总是在页面加载后立即尝试进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Azure AD B2C 保护 Blazor Wasm 应用访问的 Azure 函数?

CORS错误Azure函数与B2C-Blazor

我的 Blazor 服务器应用程序在一台本地计算机上的 Azure B2c 登录时遇到空引用错误,但在另一台本地计算机上没有,有啥想法吗?

Azure AD B2C 与 ASP.NET Web API 发出令牌,用于 Web API 中的身份验证和访问 MS Graph API

在 Blazor WebAssembly 应用程序上加载请求 B2C 登录屏幕时出错

预期发现文档中的颁发者无效:带有 Azure B2C 的 angular-oauth2-oidc