Blazor独立客户端通过Azure B2C调用函数

Blazor独立客户端通过Azure B2C调用函数,azure,azure-active-directory,azure-functions,blazor,azure-ad-b2c,Azure,Azure Active Directory,Azure Functions,Blazor,Azure Ad B2c,Blazor独立应用程序通过Azure Active Directory B2C调用函数应用程序并向函数传递具有标识的声明,是否有一个很好的示例或演练 我一直在研究文件, 和 s,但无法通过404结果 那么,我想要实现什么呢?我想搞几个POC。第一个是Blazor独立客户端应用程序,通过B2C进行身份验证,然后将授权令牌声明令牌传递给azure功能,在那里我可以解压缩用户id和电子邮件地址。第二个与上面相同,但是Blazor客户端和函数Api之间有Api管理。由于项目的性质,我在函数和api管理

Blazor独立应用程序通过Azure Active Directory B2C调用函数应用程序并向函数传递具有标识的声明,是否有一个很好的示例或演练

我一直在研究文件, 和 s,但无法通过404结果

那么,我想要实现什么呢?我想搞几个POC。第一个是Blazor独立客户端应用程序,通过B2C进行身份验证,然后将授权令牌声明令牌传递给azure功能,在那里我可以解压缩用户id和电子邮件地址。第二个与上面相同,但是Blazor客户端和函数Api之间有Api管理。由于项目的性质,我在函数和api管理中使用消耗计划

因此,只需关注第一种情况(Blazor-B2C-Function),假设我能让它正常工作,api就会随之出现

我有一个B2C客户租户,拥有两个应用程序:一个前端应用程序,授权用于api的第二个B2C应用程序的范围。我的功能应用程序的身份验证/授权设置为“使用Active Directory登录”,客户端ID设置为前端应用程序的客户端ID,颁发者uri设置为B2C的pocsignupsignin用户流,以及“允许的令牌访问群体”设置为B2C中Api的客户端ID

我可以通过浏览器获得JWT令牌,并使用postman成功调用我的函数应用程序中的函数传递承载令牌

我的Blazor应用程序可以登录到B2C。如果我没有为web应用配置授权,则我的函数调用成功

但一旦我打开授权,我就进入了CORS 404-来源'https://localhost:44389'已被CORS策略阻止:请求的资源上不存在'Access Control Allow Origin'标头。但是我已经用“启用访问控制允许凭据”配置了CORS,并配置了我的客户端url

我错过了什么? 我还怀疑id为的令牌将无法正确传递

从Program.cs

builder.Services.AddHttpClient(“ServerAPI”,
client=>client.BaseAddress=新Uri(functionURI))
.AddHttpMessageHandler();
builder.Services.AddMsalAuthentication(选项=>
{
builder.Configuration.Bind(“AzureAdB2C”,options.ProviderOptions.Authentication);
options.ProviderOptions.DefaultAccessTokenScopes.Add(readScopeURI);
options.ProviderOptions.DefaultAccessTokenScopes.Add(writeScopeURI);
Console.WriteLine($“options.ProviderOptions.DefaultAccessTokenScopes{options.ProviderOptions.DefaultAccessTokenScopes}”);
});
来自CustomAuthorizationMessageHandler

公共类CustomAuthorizationMessageHandler:AuthorizationMessageHandler { 公共CustomAuthorizationMessageHandler(IAccessTokenProvider提供程序, 导航管理器(导航管理器) :base(提供程序、navigationManager) { 配置处理程序( authorizedUrls:new[]{b2cclientur}, 作用域:新[]{“读”、“写”}); } } 从应用程序设置

"AzureAdB2C":
{
  "Authority": B2C signupsignin uri,
  "ClientId": B2C frontend client,
  "ValidateAuthority": false
}
函数调用

异步任务GetFromIficatedFunctionClient(字符串子URL)
{
尝试
{
var client=ClientFactory.CreateClient(“ServerAPI”);
WriteLine($“client.BaseAddress{client.BaseAddress}”);
结果=
等待client.GetStringAsync(子URL);
}
抓住…
}

Ca您是否可以分享您尝试过的代码以及有关您面临401错误的更多详细信息。自从我最初发布后,我做了一些更改,因此现在我不再获得401,而是404。您好@Tim很抱歉回复延迟。404问题解决了还是还在寻求帮助?嗨,拉格文德拉,我还在挣扎。我关闭了CORS并做了一些其他更改,因此我解决了404问题,但我仍然无法将Blazor应用程序中经过身份验证的用户的承载令牌传递给我的函数。但是使用postman,我可以。在我的函数代码中,`(!principal.Identity.IsAuthenticated)'我的blazor应用程序失败,但邮递员通过持票人代币,我可以超越该声明。您可以分享您尝试过的代码以及有关您面临401错误的更多详细信息。自从我最初发布后,我做了一些更改,所以现在我不再获得401,而是404。您好@Tim,很抱歉回复延迟。404问题解决了还是还在寻求帮助?嗨,拉格文德拉,我还在挣扎。我关闭了CORS并做了一些其他更改,因此我解决了404问题,但我仍然无法将Blazor应用程序中经过身份验证的用户的承载令牌传递给我的函数。但是使用邮递员我可以。在我的函数代码中,“(!principal.Identity.IsAuthenticated)”对我的blazor应用程序失败,但是邮递员传入了不记名令牌,我可以得到超出该语句的内容