使用JWT令牌从另一个API调用REST API客户端

时间:2019-02-26 19:44:38

标签: .net-core

我有一个带有两个API的平台。让我们将它们称为API A和APIB。我有一种情况,我必须从API A调用API B,并且都需要一个单一用户。所以我在那里添加了Policy和JWT令牌。

当然,两个API中的策略都是相同的。

因此,我大摇大摆地使用授权令牌在API A中调用方法A。方法可以正常工作,并可以从API B调用方法B,但是HTTP客户端没有令牌,因为它没有填充任何地方。

我正在尝试在API A(使用令牌的httpClient)中填写Startup.cs,但我不知道如何使用令牌获取HttpContext。

这是我试图在HttpClient中填充令牌的方式,但是现在我不完全知道如何从上下文中获取令牌。

services.AddHttpClient("Api_B_Client", x =>
        {
            x.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "");
        });

在上下文中令牌存在,因为我这样解析:

services.AddAuthentication().AddJwtBearer(cfg =>
        {
            SetupJwtBearerWithDecryption(cfg);
        });

在SetupJwtBearerWithDecryption方法中,我有一个OnMessageReceived事件,在那里我正在解析令牌

1 个答案:

答案 0 :(得分:0)

我针对该问题的解决方案是从Configuration HttpContextAccessor获取,并且该对象具有我正在寻找的授权令牌

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();

        services.AddHttpClient("client", x =>
        {
            var context = Configuration.Get<HttpContextAccessor>();
            x.DefaultRequestHeaders.Authorization = 
                new AuthenticationHeaderValue("Bearer", context.HttpContext.Request.Headers["Authorization"]);
        });