Blazor WASM获取的Azure AD B2C访问令牌与Postman不一致无法调用Azure Functions
解决方案
- 第一步:匹配NuGet包版本
安装与你Blazor WASM项目目标.NET版本主版本号一致的Microsoft.Authentication.WebAssembly.Msal包,比如项目目标为.NET 6就装6.x版本,.NET 8就装8.x版本,即可解决目标平台无可用运行时库的报错。 - 第二步:修改Azure AD B2C应用注册配置
分别打开Blazor客户端应用、Azure Functions API应用的注册清单,找到accessTokenAcceptedVersion字段,将值修改为2,保存配置。 - 第三步:修改Blazor项目认证配置
编辑wwwroot/appsettings.json中的Azure AD B2C配置,显式指定v2.0端点,参考配置如下:"AzureAdB2C": { "Authority": "https://<你的租户名>.b2clogin.com/<你的租户名>.onmicrosoft.com/B2C_1_signupsignin/v2.0/", "ClientId": "<Blazor客户端应用的ID>", "ValidateAuthority": false } - 第四步:调整Program.cs认证服务注册逻辑
编辑Program.cs,在注册MSAL认证时显式指定API访问scope,示例代码:builder.Services.AddMsalAuthentication(options => { builder.Configuration.Bind("AzureAdB2C", options.ProviderOptions.Authentication); // 替换为你的API实际暴露的作用域 options.ProviderOptions.DefaultAccessTokenScopes.Add("https://<租户名>.onmicrosoft.com/<Azure Functions应用ID>/user_impersonation"); }); - 第五步:验证令牌有效性
重新运行项目登录后获取的访问令牌,ver字段会显示为2.0,此时调用Azure Functions API即可正常通过认证。你之前观测到的azp与aud不一致是正常现象:azp是Blazor客户端应用的ID,aud是API应用的ID,v2.0令牌支持该场景,不会触发401错误。
内容的提问来源于stack exchange,提问作者user1227445
相关产品推荐
相关产品推荐

