ASP.NET Core MVC调用下游API:无法解析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
相关产品推荐
相关产品推荐

