You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC调用下游API:无法解析IAuthorizationHeaderProvider服务

无法解析IAuthorizationHeaderProvider服务的问题

问题详情

我正在按照微软官方教程实现Web应用调用下游API的功能,步骤如下:

1. 控制器注入IAuthorizationHeaderProvider

[Authorize]
public class HomeController : Controller
{
    readonly IAuthorizationHeaderProvider authorizationHeaderProvider;

    public HomeController(IAuthorizationHeaderProvider authorizationHeaderProvider)
    {
        this.authorizationHeaderProvider = authorizationHeaderProvider;
    }

    // 控制器操作代码(见下方)
}

2. 控制器方法中使用服务获取令牌

[AuthorizeForScopes(Scopes = new[] { "user.read" })]
public async Task<IActionResult> Profile()
{
    // 获取访问令牌
    string[] scopes = new string[]{"user.read"};
    string accessToken = await authorizationHeaderProvider.CreateAuthorizationHeaderForUserAsync(scopes);
    ...
}

3. Startup.cs中的服务配置

根据教程要求,已经在认证服务链中添加了调用下游API的相关配置:

services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(Configuration, "AzureAd")
    .EnableTokenAcquisitionToCallDownstreamApi(new string[]{"user.read" })
    .AddInMemoryTokenCaches();

但运行项目时抛出以下异常:

激活时无法解析类型为'Microsoft.Identity.Abstractions.IAuthorizationHeaderProvider'的服务

排查与解决方案

  • 检查NuGet包版本:确保项目中Microsoft.Identity.Web和Microsoft.Identity.Web.UI的包版本为最新稳定版,旧版本可能未自动注册IAuthorizationHeaderProvider服务
  • 确认服务注册链完整性:保证EnableTokenAcquisitionToCallDownstreamApi紧跟在AddMicrosoftIdentityWebApp之后,且令牌缓存配置(如AddInMemoryTokenCaches)正确链式调用,不能中断服务注册链
  • 验证命名空间:确认控制器中引用的IAuthorizationHeaderProvider来自Microsoft.Identity.Abstractions命名空间,避免因同名类型导致的注入错误
  • 清理重建项目:清理解决方案的编译缓存后重新构建,排除因缓存文件导致的依赖注入异常

内容的提问来源于stack exchange,提问作者Kyle Barnes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:37:21