【问题标题】:Authentication Handling using HTTPClient使用 HTTPClient 进行身份验证处理
【发布时间】:2018-01-18 10:56:51
【问题描述】:

我有一个连接到 Web API 的类,因此我正在像这样在类的顶部初始化一个静态 HTTPClient

private static readonly HttpClient httpClient = new HttpClient();

https://docs.microsoft.com/enus/azure/architecture/antipatterns/improper-instantiation/

这个HTTPClient被类内的所有公共方法用来联系API,除了login()之外的每个方法都需要一个基本的认证头,这个头应该是这样的:

授权:基本 device_id:X-Secret-Key

其中 device_id 是该类实例的常量,密钥是 login() 方法的返回值。

因此每个方法都应该包含:

request.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(authInfo)));

其中 request 是正在创建的 HTTPRequestMessage,authInfo 是格式为 device_id:X-Secret-Key 的字符串。

或者每个方法都应该调用与 Login() 函数使用的 HTTPClient 不同的 HTTPClient,声明如下:

var handler = new HttpClientHandler();
handler.Credentials = new NetworkCredential (device_id, secret_key);
var client = new HttpClient (handler);

感谢您的回复

【问题讨论】:

    标签: c# http-headers httpclient


    【解决方案1】:

    Authorization 头,添加到 httpClient:

    httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(authInfo)));
    

    添加此标头 ONCE 后,以后对 WEB API 服务的每次调用都应获得授权。

    【讨论】:

    • 承载参数有什么作用?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多