使用 MSAL 身份验证的 Blazor 服务器。连接到 API 时出错:无法为属性“downstreamAPI”提供值

问题描述 投票:0回答:1

我现在正处在一个痛苦的世界里。几周以来,我一直在尝试使用 AD B2C 或 Entra 为我的 Blazor 和 Maui 应用程序以及我的安全 API 提供身份验证。我尝试通过以下方式设置 Blazor 服务器应用程序:

  1. 在 VS 2022 中创建新的 ASP.NET Core Web API 项目。选择 .NET 8,身份验证“Microsoft Identity Platform”,然后让 VS 将其全部设置好。

  2. 在 .NET 7 中创建新的 Blazor Server 应用程序。选择在上一步中创建的相同 Entra 租户等。选择我要使用上面的API项目。让 VS 来设置这一切。

  3. 当我运行这两个项目时,我可以使用我的 Microsoft 详细信息登录 Blazor Server 应用程序,但是当我调用 API 时,我得到以下信息:

System.InvalidOperationException: Cannot provide a value for property 'downstreamAPI' 
on type 'Kae.BlazorServer4.Pages.CallWebApi'. 
There is no registered service of type 
'Microsoft.Identity.Web.IDownstreamWebApi'.

现在我大致知道这个错误意味着什么了。依赖注入有问题,找不到这种类型。但我不知道如何解决它。这些模板肯定应该开箱即用吗?我在这里做错了什么?

谢谢。

blazor azure-ad-b2c blazor-server-side microsoft-entra-id
1个回答
0
投票

IDownstreamWebApi
用于生成访问令牌以调用安全 API。默认情况下,您将拥有

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))

在 blazor 服务器应用程序 Program.cs 中,当您使用 VS 模板时,它允许您使用 Microsoft 帐户登录您的应用程序,但它没有提供调用 Azure AD 安全 Web API 的选项。

我们需要

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches();

以便它提供

ITokenAcquisition
服务来生成访问令牌。

@using Microsoft.Identity.Web
@inject ITokenAcquisition TokenAcquisitionService

@code {
    protected override async Task OnInitializedAsync()
    {
        var token = await TokenAcquisitionService.GetAccessTokenForUserAsync(new string[] { "api://client_id/Tiny.Greet" });
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.