背景
我正在开发一个ASP.NET Core,在这个API中我们调用了一个第三方API。这个第三方API要求每个请求都包含一个带有访问令牌的cookie。我们的API从一个声明(来自与请求关联的用户的ClaimsPrincipal )获得这个令牌。
详细信息
这个答案展示了如何在请求上设置cookie,但该示例要求手动构造HttpClient (以便能够用CookieContainer注入HttpClientHandler )。而且,由于手工实例化HttpClient是不可取的,我宁愿通过DI注入HttpClient,这个例子说明了这一点(usin IHttpClientFactory)。
在我的服务中,我可以访问一个注入的HttpClient实例(_httpClient),最简单的函数如下所示:
public async Task<string> GetStatusAsync(ClaimsPrincipal user)
{
// TODO: Add cookie with access token (from user's claims) before making request
return await _httpClient.GetStringAsync(Endpoints.Status);
}这个GitHub问题询问如何在使用IHttpClientFactory时包含授权cookie,答案是使用报头传播中间件。现在我要说的是:
据我所见,您在应用程序启动时在服务配置期间设置了报头传播中间件(包含所有头和cookie等等)。然而,在我们的API中,在实际向第三方API提出请求之前,我没有身份验证cookie的值。
问题
在发出实际请求之前,如何才能将cookie添加到HttpClient实例上,然后使用IHttpClientFactory注入到服务中?
https://stackoverflow.com/questions/62678657
复制相似问题