如何在流动客户端主题时在C#HttpClient中设置OIDC / OAuth承载令牌

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在流动客户端主题时在C#HttpClient中设置OIDC / OAuth承载令牌相关的知识,希望对你有一定的参考价值。

据我所知,HttpClient被设计为一次创建并重用。我使用IdentityServer3作为OIDC / OAuth服务器,我查看的示例为每个请求创建一个HttpClient,并使用扩展方法设置承载令牌:

var client = new HttpClient();
client.SetBearerToken(token);

SetBearerToken只是在HttpClient上设置默认授权头:

client.DefaultRequestHeaders.Authorization = 
                new AuthenticationHeaderValue("Bearer", token);

我有一个ASP.NET Web应用程序调用ASP.NET Web API,我已经配置它们,以便在进行调用时客户端标识流向API,即在配置我设置的OpenId连接身份验证时:

OpenIdConnectAuthenticationOptions.ResponseType = "id_token token"

但是,如果主题声明在令牌中传递,我现在无法重用HttpClient(例如,请求可能会在其他请求发送之前覆盖其授权标头)。

如果我想重用HttpClient,我应该将令牌设置为HttpRequestMessage吗?如果不是,处理此方案的推荐模式是什么?

答案

你一定要创建自己的HttpRequestMessage并使用SendAsync。不幸的是,您将没有用于设置承载令牌的扩展方法,但它是处理HttpClient的最佳方法。

以上是关于如何在流动客户端主题时在C#HttpClient中设置OIDC / OAuth承载令牌的主要内容,如果未能解决你的问题,请参考以下文章

HttpClient教程

通过 gmail api 发送电子邮件时在电子邮件主题中使用撇号创建问题

如何在 Blazor WASM 客户端中访问 Httpclient 标头

如何在 .net 和 .net 核心中使用 HttpClient 调用多个客户端 API

如何在构建时在 Blazor 项目中运行 T4 模板

如何在Apache HttpClient中设置TLS版本