在提供托管的Blazor WebAssembly应用之前,如何使用Azure AD B2C对服务器上的用户进行身份验证?

时间:2020-09-22 19:42:42

标签: asp.net-core blazor azure-ad-b2c blazor-webassembly

我有一个Blazor WebAssembly应用程序。它是自包含的,不使用任何Web API调用。我想使用现有的Azure AD B2C租户添加身份验证,以便只有注册用户才能访问该应用程序。

Microsoft says that

在Blazor WebAssembly应用中,可以跳过授权检查,因为用户可以修改所有客户端代码。

因此,我不是使用静态托管Blazor应用程序(独立模型),而是使用ASP.NET Core托管模型(因此为ASP.NET Core app serves the Blazor app to clients)。这样,我就可以在服务器上进行身份验证/授权-如果用户已注册并被允许访问该应用程序,则ASP.NET Core应用程序将为Blazor应用程序提供服务。如果不是,则可以显示错误页面或将其重定向。

问题是我不确定如何实现。

当我从Visual Studio 2019中的模板创建新的Blazor WebAssembly Hosted应用程序时,它将创建三个项目。共享项目,Blazor项目和Server项目。 Server项目引用Blazor项目。此行显示在Configure的{​​{1}}方法的末尾:

Startup.cs

这似乎是使它为客户端提供Blazor应用程序的原因。我不确定如何向其中添加身份验证/授权。我尝试修改此行,使其看起来像这样:

endpoints.MapFallbackToFile("index.html");

但是该应用仍然可以加载,而无需先重定向到登录屏幕。

有些Microsoft文档叫做“ Secure an ASP.NET Core Blazor WebAssembly hosted app with Azure Active Directory B2C”,听起来像是我所需要的,但实际上它仍在客户端应用程序中进行身份验证,同时还确保了对服务器应用程序的API调用(我不这样做)需要)。

有什么方法可以完成我想做的事情-在为Blazor应用提供服务之前在服务器上对用户进行身份验证,而不是在Blazor应用本身中进行身份验证?

1 个答案:

答案 0 :(得分:0)

答案很简单。实际上,RequireAuthorization()调用确实有效。如果您已经登录到B2C,则不会先重定向到登录页面(至少在Edge中,它甚至在重定向回应用程序之前甚至没有明显地先重定向到B2C,因此很混乱)。但是,如果我将页面加载到专用浏览器窗口中,则会重定向到B2C登录页面-因此它必须按预期运行。

为将来参考,标题问题的答案是:

  1. 如果尚未将身份验证添加到ASP.NET Core Server应用中。
  2. 在“服务器”应用中,添加对Blazor应用的项目引用。
  3. 将以下行添加到UseEndpointsConfigure方法内的Startup.cs调用中:
endpoints.MapFallbackToFile("index.html").RequireAuthorization();