流动客户端主题时如何在 C# HttpClient 中设置 OIDC/OAuth 不记名令牌
Posted
技术标签:
【中文标题】流动客户端主题时如何在 C# HttpClient 中设置 OIDC/OAuth 不记名令牌【英文标题】:How to set OIDC/OAuth bearer token in C# HttpClient when flowing client subject 【发布时间】:2017-02-14 10:58:11 【问题描述】:据我了解,HttpClient 旨在创建一次并重复使用。我使用 IdentityServer3 作为 OIDC/OAuth 服务器,我查看的示例为每个请求创建一个 HttpClient 并使用扩展方法设置承载令牌:
var client = new HttpClient();
client.SetBearerToken(token);
SetBearerToken 只是在 HttpClient 上设置默认授权标头:
client.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", token);
我有一个调用 ASP.NET Web API 的 ASP.NET Web 应用程序,并且我已经对其进行了配置,以便在进行调用时(即配置我设置的 OpenId 连接身份验证时)客户端身份流向 API:
OpenIdConnectAuthenticationOptions.ResponseType = "id_token token"
但是,如果主题声明在令牌中传递,我现在无法重用 HttpClient(例如,在另一个请求发送之前,请求可能会覆盖其授权标头)。
如果我想重用 HttpClient,我应该将令牌设置为 HttpRequestMessage 吗?如果不是,处理这种情况的推荐模式是什么?
【问题讨论】:
【参考方案1】:您肯定想创建自己的HttpRequestMessage 并使用SendAsync。不幸的是,您将没有设置不记名令牌的扩展方法,但它是处理 HttpClient 的最佳方法。
【讨论】:
我怀疑这就是答案。我正在使用 HttpClientExtensions,所以我可以使用 HttpClient.PostAsJsonAsync。是否有具有类似 JSON 处理扩展方法的 HttpRequestMessageExtensions 或者我必须自己推出? 恐怕不是我在正规图书馆见过的。到目前为止,每个人都被困在StringContent 中使用序列化 JSON 编写自己的样板。以上是关于流动客户端主题时如何在 C# HttpClient 中设置 OIDC/OAuth 不记名令牌的主要内容,如果未能解决你的问题,请参考以下文章
使用 C# HttpClient API 和 postman 测试的区别?客户端调用适用于邮递员,但不适用于 C# httpClient getAsync