带有 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 函数?
我的 Blazor 服务器应用程序在一台本地计算机上的 Azure B2c 登录时遇到空引用错误,但在另一台本地计算机上没有,有啥想法吗?
Azure AD B2C 与 ASP.NET Web API 发出令牌,用于 Web API 中的身份验证和访问 MS Graph API