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

克雷格·布朗

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

微软

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

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

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

当我从Visual Studio 2019中的模板创建新的Blazor WebAssembly Hosted应用程序时,它将创建三个项目。共享项目,Blazor项目和Server项目。Server项目引用Blazor项目。此行出现在Configure方法的末尾Startup.cs

endpoints.MapFallbackToFile("index.html");

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

endpoints.MapFallbackToFile("index.html").RequireAuthorization();

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

有一些Microsoft文档,名为“使用Azure Active Directory B2C保护ASP.NET Core Blazor WebAssembly托管应用程序安全”,这听起来像我所需要的,但实际上它仍在客户端应用程序中进行身份验证,同时还确保了对服务器的API调用的安全。应用程式(我不需要)。

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

克雷格·布朗

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

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

  1. 如果尚未将auth添加到ASP.NET Core Server应用中,则将其添加。
  2. 在“服务器”应用程序中,添加对Blazor应用程序的项目引用。
  3. 将以下行添加到方法中UseEndpoints调用ConfigureStartup.cs
endpoints.MapFallbackToFile("index.html").RequireAuthorization();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章