未通过CLI创建的Blazor WebAssembly托管应用接入Azure AD认证咨询
问题答复
两个方案都可以实现,优先推荐半自动导入的方式,出错概率更低。
方案1:半自动导入(推荐)
- 先用CLI创建一个和你现有项目结构完全匹配的带Azure AD认证的参考项目,执行命令:
dotnet new blazorwasm --hosted -au SingleOrg -o BlazorAuthDemo,参数里的租户、客户端ID可以先随便填,后续替换成你自己的即可。 - 生成参考项目后,分别对比客户端、服务端、共享项目的文件结构,把你现有项目缺失的文件(比如客户端的
Authentication.razor、LoginDisplay.razor,服务端的认证相关配置、登录回调处理逻辑)直接复制到你现有项目的对应路径。 - 对比两个项目的
Program.cs代码、NuGet依赖项、appsettings.json配置节点,逐一补齐差异即可。
方案2:手动补全
完全手动补全也可以正常运行,需要分别处理服务端和客户端的内容:
服务端项目修改
- 先安装必备NuGet包:
Microsoft.AspNetCore.Authentication.JwtBearer、Microsoft.Identity.Web - 在
appsettings.json中添加Azure AD配置节,填写你已经注册好的服务端应用的TenantId、ClientId、Instance等参数 - 在
Program.cs中添加认证服务注册和中间件配置,在控制器注册逻辑后添加JWT承载认证的相关代码,后续按顺序启用app.UseAuthentication()和app.UseAuthorization()中间件 - 按需添加登录、登出相关的接口实现即可
客户端项目修改
- 安装必备NuGet包:
Microsoft.AspNetCore.Components.WebAssembly.Authentication、Microsoft.Authentication.WebAssembly.Msal - 在
wwwroot/appsettings.json中添加MSAL配置节,填写你注册好的客户端应用的ClientId、Authority等参数 - 在
Program.cs中注册MSAL认证服务,配置业务HttpClient自动附加访问令牌的逻辑 - 新增
Authentication.razor页面,处理登录、登出、Azure AD回调的路由逻辑 - 在
MainLayout.razor中引入LoginDisplay组件,展示当前登录用户信息和登录/登出入口 - 在
App.razor中将默认的RouteView替换为AuthorizeRouteView,添加未授权用户的跳转逻辑
注意:修改完成后需要检查原有业务接口的
[Authorize]标签配置,避免原有接口的访问逻辑受影响。
内容的提问来源于stack exchange,提问作者Deepika
相关产品推荐
相关产品推荐

