簡體   English   中英

加密Web API請求正文內容並在服務器上解密

[英]Encrypt a web api request body content and decrypt on server

我正在尋找一種簡單的安全解決方案,該Web解決方案的Web API正文內容不會簡單地顯示給希望通過Fiddler或其他工具攔截請求的所有人。 我受到限制,因為我不能使用SSL。 我已經實現了HMAC類型的身份驗證,並希望通過在客戶端上創建主體內容的加密並將該請求發送到服務器來使它進一步前進,否則服務器隨后將解密主體並按預期進行操作,但是解密。 我為服務器端HMAC和客戶端上的delagatingHandler使用了過濾器。

我對使用HTTP請求不是很熟悉,並且不完全了解如何截取所有正文內容,然后將其加密並放回httpcontent中。

任何想法或幫助將不勝感激。

為了在WEB API中發生模型映射之前解密數據,您可以劫持AuthorizeAttribute,因為ActionFilterAttribute 模型映射之后發生。

我知道AuthorizeAttribute是出於另一個原因,但是劫持它對我來說非常有效(我想解壓縮zip內容)。

    public class DecryptAttribute : AuthorizeAttribute
    {
      public override void OnAuthorization(HttpActionContext actionContext)
      {
              actionContext.Request.Content =  DecryptContect(actionContext.Request.Content);
      }
    }

然后使用此屬性裝飾所有WebAPI控制器。

為了壓縮並嵌入到主體,我使用了委托處理程序

    public class EncryptHandler : DelegatingHandler
{
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>((responseToCompleteTask) =>
        {
            HttpResponseMessage response = responseToCompleteTask.Result;
                response.Content = new EncryptContent(response.Content);

            return response;
        },
        TaskContinuationOptions.OnlyOnRanToCompletion);
    }
}

然后只需注冊

GlobalConfiguration.Configuration.MessageHandlers.Add(new EncryptHandler());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM