首页 > 解决方案 > 如何在键入的 HttpClient 中获取访问令牌

问题描述

我的服务器端 Blazor 应用程序中有一个 IdentityServer4/WebAPI 设置和一个键入的 HttpClient。我想在向 API 发出请求时动态添加访问令牌。但无论HttpContextAuthenticationStateProviderAddHttpClient方法中还是在AddHttpMessageHandler.

这在本地工作,但在服务器上运行httpContextAccessor为空:

        services.AddHttpClient<IMyClient, MyClient>((serviceProvider, client) =>
        {       
            var httpContextAccessor = serviceProvider.GetService<IHttpContextAccessor>();
            var accessToken = await httpContextAccessor.HttpContext.GetTokenAsync("access_token");
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 
        }).AddHttpMessageHandler<MyApiBearerTokenHandler>();

试图访问AuthenticationStateProvider

        services.AddHttpClient<IMyClient, MyClient>((serviceProvider, client) =>
        {       
            var authStateProvider = serviceProvider.GetService<AuthenticationStateProvider>();
        }).AddHttpMessageHandler<MyApiBearerTokenHandler>();

引发以下错误:

'无法从根提供程序解析范围服务'Microsoft.AspNetCore.Components.Authorization.AuthenticationStateProvider'。'

如何获取访问令牌AddHttpClient?我完全走错了吗?

标签: identityserver4blazorblazor-server-side

解决方案


推荐阅读