【问题标题】:How to set OIDC/OAuth bearer token in C# HttpClient when flowing client subject流动客户端主题时如何在 C# HttpClient 中设置 OIDC/OAuth 不记名令牌
【发布时间】: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 吗?如果不是,处理这种情况的推荐模式是什么?

【问题讨论】:

    标签: c# asp.net oauth identityserver3 openid-connect


    【解决方案1】:

    您肯定想创建自己的HttpRequestMessage 并使用SendAsync。不幸的是,您将没有设置不记名令牌的扩展方法,但它是处理 HttpClient 的最佳方法。

    【讨论】:

    • 我怀疑这就是答案。我正在使用 HttpClientExtensions,所以我可以使用 HttpClient.PostAsJsonAsync。是否有具有类似 JSON 处理扩展方法的 HttpRequestMessageExtensions 或者我必须自己推出?
    • 恐怕不是我在正规图书馆见过的。到目前为止,每个人都被困在StringContent 中使用序列化 JSON 编写自己的样板。
    猜你喜欢
    • 2017-10-06
    • 1970-01-01
    • 2015-03-26
    • 2017-09-06
    • 2017-04-09
    • 2014-03-19
    • 1970-01-01
    • 2016-06-07
    • 1970-01-01
    相关资源
    最近更新 更多