API에 대한 HMAC 보안을 구현하려고합니다. 파일을 게시 할 때까지 모든 것이 잘 작동합니다.DelegatingHandler 내에서 HttpContent.ReadAsByteArrayAsync()가 오류없이 실패합니다.
HMAC 솔루션은 여기에서 찾을 수 있습니다. https://github.com/gavinharriss/WebAPI.HMAC - GET 요청과 POST 요청을 허용하는 원래의 포크입니다.
파일을 첨부 할 수있는 코드 : 나는 즉시 HttpContent.ReadAsByteArrayAsync()
를 호출하는 경우
var requestContent = new MultipartFormDataContent();
var fileContent = new ByteArrayContent(file);
requestContent.Add(fileContent, "file", filename);
아무 문제가 없다가, 바이트 배열을 사용할 수 있습니다.
그러나, HMAC HttpClient
(HMACHttpClient)를 구현 요청에 HMAC 헤더를 부착하기 위해 DelegatingHandler
(HMACDelegatingHandler).
HMACDelegatingHandler에서 요청은 속성이 도우미에서 HMAC 서명을 작성하는 데 사용되는 HttpRequestMessage
으로 전달됩니다.
서명을 구축, 다음 코드는 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
요청이 전송되지 않습니다.
아이디어가 있습니까?