我試圖實現一個API HMAC安全。一切工作正常,直到我試圖發佈文件。HttpContent.ReadAsByteArrayAsync()沒有錯誤失敗裏面DelegatingHandler
的HMAC解決方案可以在這裏找到 - https://github.com/gavinharriss/WebAPI.HMAC - 這是從原來的叉子,讓GET請求以及POST請求。
附加文件中的代碼:
var requestContent = new MultipartFormDataContent();
var fileContent = new ByteArrayContent(file);
requestContent.Add(fileContent, "file", filename);
,如果我馬上打電話HttpContent.ReadAsByteArrayAsync()
沒有問題,字節數組是可用的。
然而,HMAC HttpClient
(HMACHttpClient)實現,以便將HMAC頭附加到請求DelegatingHandler
(HMACDelegatingHandler)。
在HMACDelegatingHandler中,該請求作爲HttpRequestMessage
傳遞,HttpRequestMessage.Content
屬性用於幫助程序以構建HMAC簽名。
當建立簽名,下面的代碼是從helper class叫:
private static async Task<byte[]> ComputeHash(HttpContent httpContent)
{
using (var md5 = MD5.Create())
{
byte[] hash = null;
if (httpContent != null)
{
var content = await httpContent.ReadAsByteArrayAsync(); // <-- Fails here
if (content.Length != 0)
{
hash = md5.ComputeHash(content);
}
}
return hash;
}
}
當通過代碼var content = await httpContent.ReadAsByteArrayAsync()
線被擊中,然後什麼都沒有,沒有錯誤步進。這些請求似乎變得噗噗,但一切仍在運行,並且HttpClient
請求永遠不會被髮送。
任何想法發生了什麼?